@milaboratories/graph-maker 1.1.223 → 1.1.224
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/index.vue.d.ts.map +1 -1
- package/dist/index.vue.js +39 -39
- package/dist/index.vue.js.map +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +44 -40
- package/dist/store.js.map +1 -1
- package/dist/utils/addFixedOptionsToState.js +4 -4
- package/dist/utils/addFixedOptionsToState.js.map +1 -1
- package/dist/utils/loadDefaultSources.d.ts +1 -1
- package/dist/utils/loadDefaultSources.d.ts.map +1 -1
- package/dist/utils/loadDefaultSources.js +116 -73
- package/dist/utils/loadDefaultSources.js.map +1 -1
- package/package.json +1 -1
package/dist/index.vue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../src/index.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../src/index.vue"],"names":[],"mappings":"AAkbA,OAAO,KAAK,EAA0B,gBAAgB,EAAa,MAAM,sBAAsB,CAAC;AAGhG,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAmC,eAAe,EAAe,MAAM,SAAS,CAAC;AAyE7F,iBAAS,KAAK,SAcb;AAuSD,iBAAS,cAAc;WAiMT,OAAO,IAA6B;;+BAbf,GAAG;iCACA,GAAG;8BACN,GAAG;yBACR,GAAG;;;;EAehC;AAmCD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;gBAlPT,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;IAzW5B;;;OAGG;;;;;;;;gBAqWO,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;gBADlB,eAAe;gBACb,gBAAgB;;;;;;6FA6P5B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
package/dist/index.vue.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineComponent as ue, mergeModels as q, useModel as H, ref as p, watch as c, toRaw as i, computed as m, shallowRef as J, onMounted as se, onUnmounted as ce, useSlots as de, createElementBlock as ve, openBlock as
|
|
2
|
-
import { MiPlots as
|
|
3
|
-
import { DemoDataStore as
|
|
4
|
-
import { watchDebounced as
|
|
1
|
+
import { defineComponent as ue, mergeModels as q, useModel as H, ref as p, watch as c, toRaw as i, computed as m, shallowRef as J, onMounted as se, onUnmounted as ce, useSlots as de, createElementBlock as ve, openBlock as D, createElementVNode as pe, createVNode as N, createBlock as F, createCommentVNode as S, withCtx as O, renderSlot as P, unref as s, resolveDynamicComponent as me } from "vue";
|
|
2
|
+
import { MiPlots as ge } from "@milaboratories/miplots4";
|
|
3
|
+
import { DemoDataStore as fe } from "@milaboratories/pf-plots";
|
|
4
|
+
import { watchDebounced as g } from "@vueuse/core";
|
|
5
5
|
/* empty css */
|
|
6
6
|
import he from "./components/Chart.vue.js";
|
|
7
7
|
import Se from "./components/PanelModal.vue.js";
|
|
@@ -53,17 +53,17 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
53
53
|
*/
|
|
54
54
|
reset: z
|
|
55
55
|
});
|
|
56
|
-
const
|
|
56
|
+
const w = p(null);
|
|
57
57
|
c(() => n.pFrame, (e) => {
|
|
58
58
|
var o;
|
|
59
59
|
if (!e.ok || !e.value) {
|
|
60
|
-
|
|
60
|
+
w.value = null;
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
63
|
const a = "platforma" in window ? (o = window.platforma) == null ? void 0 : o.pFrameDriver : n.driver;
|
|
64
64
|
if (!a)
|
|
65
65
|
throw new Error("PFrame driver is missing");
|
|
66
|
-
|
|
66
|
+
w.value = new fe(
|
|
67
67
|
e.value,
|
|
68
68
|
a,
|
|
69
69
|
n.labelsModifier
|
|
@@ -73,15 +73,15 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
73
73
|
c(() => n.fixedOptions, (e, a) => {
|
|
74
74
|
(e && a && JSON.stringify(e) !== JSON.stringify(a) || e && !a || a && !e) && ($.value = e);
|
|
75
75
|
}, { deep: !0 });
|
|
76
|
-
const
|
|
76
|
+
const k = p(n.defaultOptions);
|
|
77
77
|
c(() => n.defaultOptions, (e) => {
|
|
78
|
-
|
|
78
|
+
k.value = e;
|
|
79
79
|
}, { deep: !0 });
|
|
80
80
|
const t = we(
|
|
81
81
|
i(l.value),
|
|
82
|
-
|
|
82
|
+
w,
|
|
83
83
|
n.chartType,
|
|
84
|
-
|
|
84
|
+
k,
|
|
85
85
|
$,
|
|
86
86
|
n.dataColumnPredicate,
|
|
87
87
|
n.metaColumnPredicate,
|
|
@@ -99,22 +99,22 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
99
99
|
initialDefaults: !0,
|
|
100
100
|
inputGuide: !1,
|
|
101
101
|
chartData: !1
|
|
102
|
-
}),
|
|
102
|
+
}), k.value = n.defaultOptions;
|
|
103
103
|
}
|
|
104
|
-
const Q = m(() => Ce(t.value.reactive.currentTab)), r = J(null), M = p(null), A = p(!1),
|
|
104
|
+
const Q = m(() => Ce(t.value.reactive.currentTab)), r = J(null), M = p(null), A = p(!1), f = p(null), b = m(
|
|
105
105
|
() => n.pFrame.ok && !n.pFrame.value && !n.pFrame.stable
|
|
106
106
|
), B = m(
|
|
107
107
|
() => t.value.loading.initialInputGuide && x.value === "loading"
|
|
108
108
|
), x = m((e) => {
|
|
109
109
|
var u, v;
|
|
110
|
-
if (
|
|
110
|
+
if (b.value)
|
|
111
111
|
return "running";
|
|
112
112
|
if (n.pFrame.ok && n.pFrame.stable && !n.pFrame.value)
|
|
113
113
|
return "noPframe";
|
|
114
114
|
if (!n.pFrame.ok)
|
|
115
115
|
return "noPframeWithError";
|
|
116
116
|
const a = t.value.inputGuide.value, o = t.value.chartData.value;
|
|
117
|
-
return a.consistent ? a.ready ? o && ((u = Object.values(o.data.byColumns.values)[0]) == null ? void 0 : u.length) === 0 ? "empty" : A.value ? ((v =
|
|
117
|
+
return a.consistent ? a.ready ? o && ((u = Object.values(o.data.byColumns.values)[0]) == null ? void 0 : u.length) === 0 ? "empty" : A.value ? ((v = f.value) == null ? void 0 : v.type) === "unknownError" ? "unknownError" : "knownError" : t.value.loading.initialCharts || e !== "ready" && t.value.loading.chartData || t.value.loading.chartRendering || r.value === null && (t.value.loading.inputGuide || t.value.loading.chartData) ? "loading" : "ready" : k.value === null || t.value.loading.defaults || t.value.loading.initialInputGuide ? "loading" : "notReady" : "inconsistent";
|
|
118
118
|
});
|
|
119
119
|
function X(e) {
|
|
120
120
|
var a;
|
|
@@ -124,12 +124,12 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
124
124
|
t.value.reactive.showTooltipHint = e;
|
|
125
125
|
}
|
|
126
126
|
function U(e, a) {
|
|
127
|
-
var
|
|
127
|
+
var T, C;
|
|
128
128
|
l.value = {
|
|
129
129
|
...l.value,
|
|
130
130
|
selectedPolygons: a
|
|
131
131
|
};
|
|
132
|
-
const o = (
|
|
132
|
+
const o = (C = (T = t.value.chartData.value) == null ? void 0 : T.data) == null ? void 0 : C.axesData;
|
|
133
133
|
if (e.length === 0 || !o) {
|
|
134
134
|
R.value = { axesSpec: [], selectedKeys: [] };
|
|
135
135
|
return;
|
|
@@ -172,21 +172,21 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
172
172
|
bubble: [h]
|
|
173
173
|
};
|
|
174
174
|
function Z(e) {
|
|
175
|
-
var a, o, u, v,
|
|
175
|
+
var a, o, u, v, T;
|
|
176
176
|
if (e && ((a = Object.values(e.data.values)[0]) == null ? void 0 : a.length) > 0) {
|
|
177
177
|
if (r.value)
|
|
178
178
|
r.value.updateSettingsAndData({ ...i(e.data), id: e.data.id + (n.pFrame.ok ? n.pFrame.value : "") }, i(e.settings));
|
|
179
179
|
else {
|
|
180
|
-
const
|
|
181
|
-
|
|
180
|
+
const C = document.getElementById("chartSvgContainer");
|
|
181
|
+
C && (r.value = ge.newPlot(i(e.data), i(e.settings), ee[e.settings.type]), e.settings.type === "scatterplot-umap" && r.value.updateChartState("polygon", l.value.selectedPolygons ?? []), r.value.mount(C));
|
|
182
182
|
}
|
|
183
|
-
M.value = (o = r.value) != null && o.calculatedData ? { ...r.value.calculatedData } : null, A.value = ((u = r.value) == null ? void 0 : u.hasError) ?? !1,
|
|
183
|
+
M.value = (o = r.value) != null && o.calculatedData ? { ...r.value.calculatedData } : null, A.value = ((u = r.value) == null ? void 0 : u.hasError) ?? !1, f.value = ((v = r.value) == null ? void 0 : v.errorInfo) ?? null;
|
|
184
184
|
} else
|
|
185
|
-
(
|
|
185
|
+
(T = r.value) == null || T.unmount(), r.value = null, f.value = null;
|
|
186
186
|
}
|
|
187
187
|
c(() => x.value, (e) => {
|
|
188
188
|
var a;
|
|
189
|
-
(e === "notReady" || e === "noPframe" ||
|
|
189
|
+
(e === "notReady" || e === "noPframe" || w.value === null) && ((a = r.value) == null || a.unmount(), r.value = null);
|
|
190
190
|
});
|
|
191
191
|
const I = J(null);
|
|
192
192
|
c([
|
|
@@ -223,37 +223,37 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
223
223
|
}), ce(() => {
|
|
224
224
|
var e;
|
|
225
225
|
(e = r.value) == null || e.unmount();
|
|
226
|
-
}),
|
|
226
|
+
}), g(() => t.value.reactive.optionsState, (e) => {
|
|
227
227
|
l.value = {
|
|
228
228
|
...l.value,
|
|
229
229
|
optionsState: y(e)
|
|
230
230
|
};
|
|
231
|
-
}, { deep: !0, debounce: 1e3 }),
|
|
231
|
+
}, { deep: !0, debounce: 1e3 }), g(() => t.value.reactive.usedDefaultOptions, (e) => {
|
|
232
232
|
l.value = {
|
|
233
233
|
...l.value,
|
|
234
234
|
usedDefaultOptions: y(e)
|
|
235
235
|
};
|
|
236
|
-
}, { deep: !0, debounce: 1e3 }),
|
|
236
|
+
}, { deep: !0, debounce: 1e3 }), g(() => t.value.reactive.statisticsSettings, (e) => {
|
|
237
237
|
l.value = {
|
|
238
238
|
...l.value,
|
|
239
239
|
statisticsSettings: y(e)
|
|
240
240
|
};
|
|
241
|
-
}, { deep: !0, debounce: 1e3 }),
|
|
241
|
+
}, { deep: !0, debounce: 1e3 }), g(() => t.value.reactive.axesSettings, (e) => {
|
|
242
242
|
l.value = {
|
|
243
243
|
...l.value,
|
|
244
244
|
axesSettings: y(e)
|
|
245
245
|
};
|
|
246
|
-
}, { deep: !0, debounce: 1e3 }),
|
|
246
|
+
}, { deep: !0, debounce: 1e3 }), g(() => t.value.reactive.layersSettings, (e) => {
|
|
247
247
|
l.value = {
|
|
248
248
|
...l.value,
|
|
249
249
|
layersSettings: y(e)
|
|
250
250
|
};
|
|
251
|
-
}, { deep: !0, debounce: 1e3 }),
|
|
251
|
+
}, { deep: !0, debounce: 1e3 }), g(() => t.value.reactive.dataBindAes, (e) => {
|
|
252
252
|
l.value = {
|
|
253
253
|
...l.value,
|
|
254
254
|
dataBindAes: y(e)
|
|
255
255
|
};
|
|
256
|
-
}, { deep: !0, debounce: 1e3 }),
|
|
256
|
+
}, { deep: !0, debounce: 1e3 }), g([
|
|
257
257
|
() => t.value.reactive.chartScale,
|
|
258
258
|
() => t.value.reactive.template,
|
|
259
259
|
() => t.value.reactive.currentTab
|
|
@@ -294,14 +294,14 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
294
294
|
const G = de(), ne = m(() => !!G.annotationsSlot), oe = m(() => !!G.settingsSlot), re = m(() => !!G.logSlot);
|
|
295
295
|
return (e, a) => {
|
|
296
296
|
var o;
|
|
297
|
-
return
|
|
297
|
+
return D(), ve("div", Oe, [
|
|
298
298
|
pe("div", Pe, [
|
|
299
299
|
N(he, {
|
|
300
300
|
"graph-status": x.value,
|
|
301
301
|
graphTitle: l.value.title,
|
|
302
302
|
chartData: M.value,
|
|
303
303
|
"chart-ref": r.value,
|
|
304
|
-
"error-info":
|
|
304
|
+
"error-info": f.value,
|
|
305
305
|
dendroTooltipButton: d.tooltipButton,
|
|
306
306
|
"custom-status-text": d.statusText,
|
|
307
307
|
"allow-title-editing": d.allowTitleEditing,
|
|
@@ -315,9 +315,9 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
315
315
|
]),
|
|
316
316
|
_: 3
|
|
317
317
|
}, 8, ["graph-status", "graphTitle", "chartData", "chart-ref", "error-info", "dendroTooltipButton", "custom-status-text", "allow-title-editing", "isScatterplotZoomChanged"]),
|
|
318
|
-
B.value ||
|
|
318
|
+
B.value || b.value ? (D(), F(Fe, {
|
|
319
319
|
key: 0,
|
|
320
|
-
graphStatus:
|
|
320
|
+
graphStatus: b.value ? "running" : "loading",
|
|
321
321
|
top: 67,
|
|
322
322
|
left: 12,
|
|
323
323
|
right: 12,
|
|
@@ -326,12 +326,12 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
326
326
|
}, null, 8, ["graphStatus", "customStatusText"])) : S("", !0),
|
|
327
327
|
N(be, { id: "graph-settings-modal" }, {
|
|
328
328
|
default: O(() => [
|
|
329
|
-
s(t).reactive.currentTab && !((B.value ||
|
|
329
|
+
s(t).reactive.currentTab && !((B.value || b.value) && s(De)(s(t).reactive.currentTab)) ? (D(), F(Se, {
|
|
330
330
|
key: 0,
|
|
331
331
|
onClose: a[1] || (a[1] = (u) => s(t).reactive.currentTab = null)
|
|
332
332
|
}, {
|
|
333
333
|
default: O(() => [
|
|
334
|
-
(
|
|
334
|
+
(D(), F(me(Q.value.value), null, {
|
|
335
335
|
default: O(() => [
|
|
336
336
|
s(t).reactive.currentTab === "annotations" ? P(e.$slots, "annotationsSlot", { key: 0 }) : S("", !0),
|
|
337
337
|
s(t).reactive.currentTab === "settings" ? P(e.$slots, "settingsSlot", { key: 1 }) : S("", !0),
|
|
@@ -355,13 +355,13 @@ const Oe = { class: "graph-maker" }, Pe = { class: "graph-maker__main-pane" }, _
|
|
|
355
355
|
hasAnnotationsSlot: ne.value,
|
|
356
356
|
hasSettingsSlot: oe.value,
|
|
357
357
|
hasLogSlot: re.value,
|
|
358
|
-
initialLoading: B.value ||
|
|
358
|
+
initialLoading: B.value || b.value,
|
|
359
359
|
onExport: te,
|
|
360
360
|
onDelete: a[3] || (a[3] = (u) => e.$emit("delete-this-graph"))
|
|
361
361
|
}, null, 8, ["modelValue", "chart-type", "graph-status", "allowDeleting", "hasAnnotationsSlot", "hasSettingsSlot", "hasLogSlot", "initialLoading"]),
|
|
362
|
-
((o =
|
|
362
|
+
((o = f.value) == null ? void 0 : o.type) === "unknownError" ? (D(), F(Te, {
|
|
363
363
|
key: 0,
|
|
364
|
-
errorInfo:
|
|
364
|
+
errorInfo: f.value
|
|
365
365
|
}, null, 8, ["errorInfo"])) : S("", !0)
|
|
366
366
|
]);
|
|
367
367
|
};
|
package/dist/index.vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue.js","sources":["../src/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n ErrorInfo,\n LassoControlsState,\n Settings,\n} from '@milaboratories/miplots4';\nimport { MiPlots } from '@milaboratories/miplots4';\nimport type { ChartType, PlotDataAndSettings } from '@milaboratories/pf-plots';\nimport { DemoDataStore } from '@milaboratories/pf-plots';\nimport type { AxisSpec, PFrameDriver, PlSelectionModel, PTableKey } from '@platforma-sdk/model';\nimport { watchDebounced } from '@vueuse/core';\nimport { computed, onMounted, onUnmounted, ref, shallowRef, toRaw, useSlots, watch } from 'vue';\nimport './assets/ui.scss';\nimport Chart from './components/Chart.vue';\nimport PanelModal from './components/PanelModal.vue';\nimport VTabs from './components/SettingsTabs/index.vue';\nimport TransitionSlidePanel from './components/TransitionSlidePanel.vue';\nimport ChartErrorNotificationAlert from './components/ChartErrorNotificationAlert.vue';\nimport { isOwnGraphMakerTab, useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { DendroNodeInfo, GraphMakerProps, GraphMakerState, GraphStatus } from './types';\nimport { composeChartSettings, saveToFile } from './utils';\nimport { copyJSON } from './utils/copyJSON';\nimport GraphStatusScreen from './components/GraphStatusScreen.vue';\n\nconst _emit = defineEmits(['delete-this-graph', 'tooltip-btn-click']);\n\nconst graphMakerState = defineModel<GraphMakerState>({ required: true });\nconst selectionState = defineModel<PlSelectionModel>('selection');\n\nconst props = defineProps<GraphMakerProps>();\n\ndefineExpose({\n /**\n reset() will update data-mapping, axis-settings, layers-settings with the state that is in v-model at the moment.\n In other cases editing of v-model fields doesn't make any impact to graphs and interface.\n */\n reset,\n});\n\nconst dataStore = ref<DemoDataStore | null>(null);\n\nwatch(() => props.pFrame, (pframe) => {\n if (!pframe.ok || !pframe.value) {\n dataStore.value = null;\n return;\n }\n const driver = ('platforma' in window) ? window.platforma?.pFrameDriver as PFrameDriver : props.driver;\n if (!driver) {\n throw new Error('PFrame driver is missing');\n }\n dataStore.value = new DemoDataStore(\n pframe.value,\n driver,\n props.labelsModifier,\n );\n}, { immediate: true, deep: true });\n\n// fixed options can be updated outside, other settings only inside from chart settings interface, so we don't watching other settings\nconst fixedOptions = ref<typeof props.fixedOptions>(props.fixedOptions ?? []);\nwatch(() => props.fixedOptions, (value, oldValue) => {\n if (\n (value && oldValue && JSON.stringify(value) !== JSON.stringify(oldValue))\n || (value && !oldValue)\n || (oldValue && !value)\n ) {\n fixedOptions.value = value;\n }\n}, { deep: true });\nconst defaultOptions = ref<typeof props.defaultOptions>(props.defaultOptions);\nwatch(() => props.defaultOptions, (v) => {\n if (v && !defaultOptions.value) {\n defaultOptions.value = v;\n }\n}, { deep: true });\nconst state = provideStore(\n toRaw(graphMakerState.value),\n dataStore,\n props.chartType,\n defaultOptions,\n fixedOptions,\n props.dataColumnPredicate,\n props.metaColumnPredicate,\n props.readonlyInputs,\n props.defaultPalette,\n);\n\nfunction reset() {\n const nextReactiveState = createReactiveState(\n toRaw(graphMakerState.value),\n props.chartType,\n );\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions;\n}\n\nconst currentForm = computed(() => useSettingsForm(state.value.reactive.currentTab));\n\nconst chartRef = shallowRef<ChartInterface | null>(null);\nconst chartCalculatedDataRef = ref<Record<string, unknown> | null>(null);\nconst chartError = ref(false);\nconst chartErrorInfo = ref<ErrorInfo | null>(null);\n\nconst isRunning = computed(\n () => props.pFrame.ok && !props.pFrame.value && !props.pFrame.stable,\n);\nconst isInitialLoading = computed(\n () => state.value.loading.initialInputGuide && graphStatus.value === 'loading',\n);\n\nconst graphStatus = computed<GraphStatus>((previousStatus) => {\n if (isRunning.value) {\n return 'running';\n }\n if (props.pFrame.ok && props.pFrame.stable && !props.pFrame.value) {\n return 'noPframe';\n }\n if (!props.pFrame.ok) {\n return 'noPframeWithError';\n }\n const inputGuide = state.value.inputGuide.value;\n const chartData = state.value.chartData.value;\n if (!inputGuide.consistent) {\n return 'inconsistent';\n }\n if (!inputGuide.ready) {\n return defaultOptions.value === null\n || state.value.loading.defaults\n || state.value.loading.initialInputGuide\n ? 'loading'\n : 'notReady';\n }\n if (chartData && Object.values(chartData.data.byColumns.values)[0]?.length === 0) {\n return 'empty';\n }\n if (chartError.value) {\n return chartErrorInfo.value?.type === 'unknownError' ? 'unknownError' : 'knownError';\n }\n if (\n (state.value.loading.initialCharts || (previousStatus !== 'ready' && state.value.loading.chartData) || state.value.loading.chartRendering)\n || (chartRef.value === null && (state.value.loading.inputGuide || state.value.loading.chartData))\n ) {\n return 'loading';\n }\n return 'ready';\n});\n\nfunction onTreeNodeClick(d: DendroNodeInfo) {\n state.value.reactive.dendroSelectedNodeId = d?.info[0]?.id as number;\n state.value.reactive.dendroInfoByClick = d;\n}\n\nfunction onTooltipHintSwitch(v: boolean) {\n state.value.reactive.showTooltipHint = v;\n}\n\nfunction onLassoPolygonUpdate(dotIndexes: number[], polygons: { points: [number, number][]; closed: boolean }[]) {\n graphMakerState.value = {\n ...graphMakerState.value,\n selectedPolygons: polygons,\n };\n\n const axesData = state.value.chartData.value?.data?.axesData;\n if (dotIndexes.length === 0 || !axesData) {\n selectionState.value = { axesSpec: [], selectedKeys: [] };\n return;\n }\n\n const axisKeys = Object.keys(axesData);\n const inputGuide = state.value.inputGuide.value;\n selectionState.value = {\n axesSpec: axisKeys.map((axisKey) => inputGuide.getSourceInfo(axisKey).spec as AxisSpec),\n selectedKeys: dotIndexes.map((idx) => axisKeys.map((axisKey) => axesData[axisKey][idx]) as PTableKey),\n };\n}\n\nfunction onLassoStateChange(v: LassoControlsState) {\n state.value.reactive.lassoControlsState = v;\n}\nlet chartRenderingInProgress: ReturnType<typeof setTimeout> | null = null;\nfunction onLoadingStateChange(v: boolean) {\n if (v) {\n chartRenderingInProgress = setTimeout(() => {\n state.value.loading.chartRendering = true;\n }, 1000);\n } else {\n if (chartRenderingInProgress) {\n clearTimeout(chartRenderingInProgress);\n }\n state.value.loading.chartRendering = false;\n }\n}\nconst isScatterplotZoomChanged = ref(false);\nfunction onZoomChange(isZoomChanged: boolean) {\n isScatterplotZoomChanged.value = isZoomChanged;\n}\nconst graphEventHandlers: Record<ChartType, unknown> = {\n 'dendro': [onTreeNodeClick],\n 'scatterplot-umap': {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange,\n onZoomChange,\n },\n 'discrete': [onTooltipHintSwitch],\n 'scatterplot': {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange,\n },\n 'histogram': [onTooltipHintSwitch],\n 'heatmap': { onTooltipHintSwitch, onLoadingChange: onLoadingStateChange },\n 'bubble': [onTooltipHintSwitch],\n};\nfunction updateChart(value: { data: PlotDataAndSettings['data']['byColumns']; settings: PlotDataAndSettings['settings'] } | null) {\n // if dataByColumns exists but columns has no data - show empty chart\n if (value && Object.values(value.data.values)[0]?.length > 0) {\n // console.log('value.dataByColumns', toRaw(value.data));\n // console.log('value.settings', toRaw(value.settings));\n if (chartRef.value) {\n chartRef.value.updateSettingsAndData({ ...toRaw(value.data), id: value.data.id + (props.pFrame.ok ? props.pFrame.value : '') }, toRaw(value.settings) as Settings);\n } else {\n const htmlNode = document.getElementById('chartSvgContainer');\n if (htmlNode) {\n chartRef.value = MiPlots.newPlot(toRaw(value.data), toRaw(value.settings) as Settings, graphEventHandlers[value.settings.type as ChartType]);\n if (value.settings.type === 'scatterplot-umap') {\n // set default polygons (from props)\n chartRef.value.updateChartState('polygon', graphMakerState.value.selectedPolygons ?? []);\n }\n chartRef.value.mount(htmlNode);\n }\n }\n // calculated by chart renderer data, tree hierarchy for example\n chartCalculatedDataRef.value = chartRef.value?.calculatedData ? { ...chartRef.value.calculatedData } : null;\n chartError.value = chartRef.value?.hasError ?? false;\n chartErrorInfo.value = chartRef.value?.errorInfo ?? null;\n } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n chartErrorInfo.value = null;\n }\n}\n\nwatch(() => graphStatus.value, (v) => {\n if (v === 'notReady' || v === 'noPframe' || dataStore.value === null) {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n});\n\nconst chartDataForRender = shallowRef<{ settings: Settings; data: DataByColumns } | null>(null);\nwatch([\n () => state.value.chartData.value,\n], ([chartData]) => {\n chartDataForRender.value = composeChartSettings(\n toRaw(chartData),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n toRaw(state.value.defaultPalette),\n );\n});\nwatch([\n () => state.value.reactive.template,\n () => state.value.reactive.layersSettings,\n () => state.value.reactive.axesSettings,\n () => state.value.reactive.statisticsSettings,\n () => state.value.reactive.dataBindAes,\n () => state.value.reactive.chartScale,\n], () => {\n chartDataForRender.value = composeChartSettings(\n toRaw(state.value.chartData.value),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n toRaw(state.value.defaultPalette),\n );\n}, { deep: true });\n\nwatch(() => chartDataForRender.value, (chartData) => {\n updateChart(chartData);\n});\nonMounted(() => {\n updateChart(null);\n});\nonUnmounted(() => {\n chartRef.value?.unmount();\n});\n\nwatchDebounced(() => state.value.reactive.optionsState, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n optionsState: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.usedDefaultOptions, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n usedDefaultOptions: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.statisticsSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n statisticsSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.axesSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n axesSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.layersSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n layersSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.dataBindAes, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataBindAes: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\n\nwatchDebounced([\n () => state.value.reactive.chartScale,\n () => state.value.reactive.template,\n () => state.value.reactive.currentTab,\n], ([zoomState, template, currentTab]) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n zoomState,\n template,\n currentTab,\n };\n}, { debounce: 1000 });\n\nwatch(() => graphMakerState.value.currentTab, (v) => {\n state.value.reactive.currentTab = v === undefined ? 'dataMapping' : v;\n});\n\nwatch(() => graphMakerState.value?.layersSettings?.dendro?.showTable, (v) => {\n state.value.reactive.layersSettings.dendro.showTable = v ?? false;\n});\n\nfunction onExport() {\n saveToFile(\n new Blob([\n chartRef.value?.export() ?? '',\n ]),\n 'chart.svg',\n );\n}\n\nfunction updateGraphTitle(nextTitle: string) {\n graphMakerState.value = {\n ...graphMakerState.value,\n title: nextTitle,\n };\n}\n\nfunction selectTreeNode(id: number | null) {\n state.value.reactive.dendroSelectedNodeId = id;\n chartRef.value?.updateChartState('selectedNode', id);\n}\n\nconst slots = useSlots();\n\nconst hasAnnotationsSlot = computed(() => Boolean(slots.annotationsSlot));\nconst hasSettingsSlot = computed(() => Boolean(slots.settingsSlot));\nconst hasLogSlot = computed(() => Boolean(slots.logSlot));\n\n</script>\n\n<template>\n <div class=\"graph-maker\">\n <div class=\"graph-maker__main-pane\">\n <Chart\n :graph-status=\"graphStatus\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :error-info=\"chartErrorInfo\" :dendroTooltipButton=\"tooltipButton\"\n :custom-status-text=\"statusText\"\n :allow-title-editing=\"allowTitleEditing\"\n :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"\n @graph-title-update=\"updateGraphTitle\" @dendro-node-select=\"selectTreeNode\"\n @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\"\n >\n <slot name=\"titleLineSlot\" />\n </Chart>\n <GraphStatusScreen v-if=\"isInitialLoading || isRunning\" :graphStatus=\"isRunning ? 'running' : 'loading'\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" :customStatusText=\"statusText\" />\n <TransitionSlidePanel id=\"graph-settings-modal\">\n <PanelModal\n v-if=\"state.reactive.currentTab && !((isInitialLoading || isRunning) && isOwnGraphMakerTab(state.reactive.currentTab))\"\n @close=\"state.reactive.currentTab = null\"\n >\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'annotations'\" name=\"annotationsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\" />\n </component>\n </PanelModal>\n </TransitionSlidePanel>\n </div>\n <VTabs\n v-model=\"state.reactive.currentTab\" :chart-type=\"state.reactive.chartType\" :graph-status=\"graphStatus\"\n :allowDeleting=\"allowChartDeleting\" :hasAnnotationsSlot=\"hasAnnotationsSlot\" :hasSettingsSlot=\"hasSettingsSlot\"\n :hasLogSlot=\"hasLogSlot\" :initialLoading=\"isInitialLoading || isRunning\" @export=\"onExport\"\n @delete=\"$emit('delete-this-graph')\"\n />\n <ChartErrorNotificationAlert v-if=\"chartErrorInfo?.type === 'unknownError'\" :errorInfo=\"chartErrorInfo\" />\n </div>\n</template>\n"],"names":["graphMakerState","_useModel","selectionState","__props","props","__expose","reset","dataStore","ref","watch","pframe","driver","_a","DemoDataStore","fixedOptions","value","oldValue","defaultOptions","v","state","provideStore","toRaw","nextReactiveState","createReactiveState","currentForm","computed","useSettingsForm","chartRef","shallowRef","chartCalculatedDataRef","chartError","chartErrorInfo","isRunning","isInitialLoading","graphStatus","previousStatus","inputGuide","chartData","_b","onTreeNodeClick","d","onTooltipHintSwitch","onLassoPolygonUpdate","dotIndexes","polygons","axesData","axisKeys","axisKey","idx","onLassoStateChange","chartRenderingInProgress","onLoadingStateChange","isScatterplotZoomChanged","onZoomChange","isZoomChanged","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","_e","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","copyJSON","zoomState","template","currentTab","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasAnnotationsSlot","hasSettingsSlot","hasLogSlot","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","Chart","_cache","$emit","_renderSlot","_ctx","_createBlock","GraphStatusScreen","TransitionSlidePanel","_unref","PanelModal","$event","_resolveDynamicComponent","VTabs","ChartErrorNotificationAlert"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue.js","sources":["../src/index.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type {\n ChartInterface,\n DataByColumns,\n ErrorInfo,\n LassoControlsState,\n Settings,\n} from '@milaboratories/miplots4';\nimport { MiPlots } from '@milaboratories/miplots4';\nimport type { ChartType, PlotDataAndSettings } from '@milaboratories/pf-plots';\nimport { DemoDataStore } from '@milaboratories/pf-plots';\nimport type { AxisSpec, PFrameDriver, PlSelectionModel, PTableKey } from '@platforma-sdk/model';\nimport { watchDebounced } from '@vueuse/core';\nimport { computed, onMounted, onUnmounted, ref, shallowRef, toRaw, useSlots, watch } from 'vue';\nimport './assets/ui.scss';\nimport Chart from './components/Chart.vue';\nimport PanelModal from './components/PanelModal.vue';\nimport VTabs from './components/SettingsTabs/index.vue';\nimport TransitionSlidePanel from './components/TransitionSlidePanel.vue';\nimport ChartErrorNotificationAlert from './components/ChartErrorNotificationAlert.vue';\nimport { isOwnGraphMakerTab, useSettingsForm } from './forms';\nimport { createReactiveState, provideStore } from './store';\nimport type { DendroNodeInfo, GraphMakerProps, GraphMakerState, GraphStatus } from './types';\nimport { composeChartSettings, saveToFile } from './utils';\nimport { copyJSON } from './utils/copyJSON';\nimport GraphStatusScreen from './components/GraphStatusScreen.vue';\n\nconst _emit = defineEmits(['delete-this-graph', 'tooltip-btn-click']);\n\nconst graphMakerState = defineModel<GraphMakerState>({ required: true });\nconst selectionState = defineModel<PlSelectionModel>('selection');\n\nconst props = defineProps<GraphMakerProps>();\n\ndefineExpose({\n /**\n reset() will update data-mapping, axis-settings, layers-settings with the state that is in v-model at the moment.\n In other cases editing of v-model fields doesn't make any impact to graphs and interface.\n */\n reset,\n});\n\nconst dataStore = ref<DemoDataStore | null>(null);\n\nwatch(() => props.pFrame, (pframe) => {\n if (!pframe.ok || !pframe.value) {\n dataStore.value = null;\n return;\n }\n const driver = ('platforma' in window) ? window.platforma?.pFrameDriver as PFrameDriver : props.driver;\n if (!driver) {\n throw new Error('PFrame driver is missing');\n }\n dataStore.value = new DemoDataStore(\n pframe.value,\n driver,\n props.labelsModifier,\n );\n}, { immediate: true, deep: true });\n\n// fixed options can be updated outside, other settings only inside from chart settings interface, so we don't watching other settings\nconst fixedOptions = ref<typeof props.fixedOptions>(props.fixedOptions ?? []);\nwatch(() => props.fixedOptions, (value, oldValue) => {\n if (\n (value && oldValue && JSON.stringify(value) !== JSON.stringify(oldValue))\n || (value && !oldValue)\n || (oldValue && !value)\n ) {\n fixedOptions.value = value;\n }\n}, { deep: true });\nconst defaultOptions = ref<typeof props.defaultOptions>(props.defaultOptions);\nwatch(() => props.defaultOptions, (v) => {\n defaultOptions.value = v;\n}, { deep: true });\nconst state = provideStore(\n toRaw(graphMakerState.value),\n dataStore,\n props.chartType,\n defaultOptions,\n fixedOptions,\n props.dataColumnPredicate,\n props.metaColumnPredicate,\n props.readonlyInputs,\n props.defaultPalette,\n);\n\nfunction reset() {\n const nextReactiveState = createReactiveState(\n toRaw(graphMakerState.value),\n props.chartType,\n );\n Object.assign(state.value.reactive, nextReactiveState);\n Object.assign(state.value.loading, {\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n });\n defaultOptions.value = props.defaultOptions;\n}\n\nconst currentForm = computed(() => useSettingsForm(state.value.reactive.currentTab));\n\nconst chartRef = shallowRef<ChartInterface | null>(null);\nconst chartCalculatedDataRef = ref<Record<string, unknown> | null>(null);\nconst chartError = ref(false);\nconst chartErrorInfo = ref<ErrorInfo | null>(null);\n\nconst isRunning = computed(\n () => props.pFrame.ok && !props.pFrame.value && !props.pFrame.stable,\n);\nconst isInitialLoading = computed(\n () => state.value.loading.initialInputGuide && graphStatus.value === 'loading',\n);\n\nconst graphStatus = computed<GraphStatus>((previousStatus) => {\n if (isRunning.value) {\n return 'running';\n }\n if (props.pFrame.ok && props.pFrame.stable && !props.pFrame.value) {\n return 'noPframe';\n }\n if (!props.pFrame.ok) {\n return 'noPframeWithError';\n }\n const inputGuide = state.value.inputGuide.value;\n const chartData = state.value.chartData.value;\n if (!inputGuide.consistent) {\n return 'inconsistent';\n }\n if (!inputGuide.ready) {\n return defaultOptions.value === null\n || state.value.loading.defaults\n || state.value.loading.initialInputGuide\n ? 'loading'\n : 'notReady';\n }\n if (chartData && Object.values(chartData.data.byColumns.values)[0]?.length === 0) {\n return 'empty';\n }\n if (chartError.value) {\n return chartErrorInfo.value?.type === 'unknownError' ? 'unknownError' : 'knownError';\n }\n if (\n (state.value.loading.initialCharts || (previousStatus !== 'ready' && state.value.loading.chartData) || state.value.loading.chartRendering)\n || (chartRef.value === null && (state.value.loading.inputGuide || state.value.loading.chartData))\n ) {\n return 'loading';\n }\n return 'ready';\n});\n\nfunction onTreeNodeClick(d: DendroNodeInfo) {\n state.value.reactive.dendroSelectedNodeId = d?.info[0]?.id as number;\n state.value.reactive.dendroInfoByClick = d;\n}\n\nfunction onTooltipHintSwitch(v: boolean) {\n state.value.reactive.showTooltipHint = v;\n}\n\nfunction onLassoPolygonUpdate(dotIndexes: number[], polygons: { points: [number, number][]; closed: boolean }[]) {\n graphMakerState.value = {\n ...graphMakerState.value,\n selectedPolygons: polygons,\n };\n\n const axesData = state.value.chartData.value?.data?.axesData;\n if (dotIndexes.length === 0 || !axesData) {\n selectionState.value = { axesSpec: [], selectedKeys: [] };\n return;\n }\n\n const axisKeys = Object.keys(axesData);\n const inputGuide = state.value.inputGuide.value;\n selectionState.value = {\n axesSpec: axisKeys.map((axisKey) => inputGuide.getSourceInfo(axisKey).spec as AxisSpec),\n selectedKeys: dotIndexes.map((idx) => axisKeys.map((axisKey) => axesData[axisKey][idx]) as PTableKey),\n };\n}\n\nfunction onLassoStateChange(v: LassoControlsState) {\n state.value.reactive.lassoControlsState = v;\n}\nlet chartRenderingInProgress: ReturnType<typeof setTimeout> | null = null;\nfunction onLoadingStateChange(v: boolean) {\n if (v) {\n chartRenderingInProgress = setTimeout(() => {\n state.value.loading.chartRendering = true;\n }, 1000);\n } else {\n if (chartRenderingInProgress) {\n clearTimeout(chartRenderingInProgress);\n }\n state.value.loading.chartRendering = false;\n }\n}\nconst isScatterplotZoomChanged = ref(false);\nfunction onZoomChange(isZoomChanged: boolean) {\n isScatterplotZoomChanged.value = isZoomChanged;\n}\nconst graphEventHandlers: Record<ChartType, unknown> = {\n 'dendro': [onTreeNodeClick],\n 'scatterplot-umap': {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange,\n onZoomChange,\n },\n 'discrete': [onTooltipHintSwitch],\n 'scatterplot': {\n onPolygonUpdate: onLassoPolygonUpdate,\n onTooltipHintSwitch,\n onLassoControlsStateUpdate: onLassoStateChange,\n },\n 'histogram': [onTooltipHintSwitch],\n 'heatmap': { onTooltipHintSwitch, onLoadingChange: onLoadingStateChange },\n 'bubble': [onTooltipHintSwitch],\n};\nfunction updateChart(value: { data: PlotDataAndSettings['data']['byColumns']; settings: PlotDataAndSettings['settings'] } | null) {\n // if dataByColumns exists but columns has no data - show empty chart\n if (value && Object.values(value.data.values)[0]?.length > 0) {\n // console.log('value.dataByColumns', toRaw(value.data));\n // console.log('value.settings', toRaw(value.settings));\n if (chartRef.value) {\n chartRef.value.updateSettingsAndData({ ...toRaw(value.data), id: value.data.id + (props.pFrame.ok ? props.pFrame.value : '') }, toRaw(value.settings) as Settings);\n } else {\n const htmlNode = document.getElementById('chartSvgContainer');\n if (htmlNode) {\n chartRef.value = MiPlots.newPlot(toRaw(value.data), toRaw(value.settings) as Settings, graphEventHandlers[value.settings.type as ChartType]);\n if (value.settings.type === 'scatterplot-umap') {\n // set default polygons (from props)\n chartRef.value.updateChartState('polygon', graphMakerState.value.selectedPolygons ?? []);\n }\n chartRef.value.mount(htmlNode);\n }\n }\n // calculated by chart renderer data, tree hierarchy for example\n chartCalculatedDataRef.value = chartRef.value?.calculatedData ? { ...chartRef.value.calculatedData } : null;\n chartError.value = chartRef.value?.hasError ?? false;\n chartErrorInfo.value = chartRef.value?.errorInfo ?? null;\n } else {\n chartRef.value?.unmount();\n chartRef.value = null;\n chartErrorInfo.value = null;\n }\n}\n\nwatch(() => graphStatus.value, (v) => {\n if (v === 'notReady' || v === 'noPframe' || dataStore.value === null) {\n chartRef.value?.unmount();\n chartRef.value = null;\n }\n});\n\nconst chartDataForRender = shallowRef<{ settings: Settings; data: DataByColumns } | null>(null);\nwatch([\n () => state.value.chartData.value,\n], ([chartData]) => {\n chartDataForRender.value = composeChartSettings(\n toRaw(chartData),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n toRaw(state.value.defaultPalette),\n );\n});\nwatch([\n () => state.value.reactive.template,\n () => state.value.reactive.layersSettings,\n () => state.value.reactive.axesSettings,\n () => state.value.reactive.statisticsSettings,\n () => state.value.reactive.dataBindAes,\n () => state.value.reactive.chartScale,\n], () => {\n chartDataForRender.value = composeChartSettings(\n toRaw(state.value.chartData.value),\n toRaw(state.value.inputGuide.value),\n toRaw(state.value.uniqueValuesData.value),\n toRaw(state.value.filterLabelsInfo.value),\n toRaw(state.value.reactive),\n toRaw(state.value.defaultPalette),\n );\n}, { deep: true });\n\nwatch(() => chartDataForRender.value, (chartData) => {\n updateChart(chartData);\n});\nonMounted(() => {\n updateChart(null);\n});\nonUnmounted(() => {\n chartRef.value?.unmount();\n});\n\nwatchDebounced(() => state.value.reactive.optionsState, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n optionsState: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.usedDefaultOptions, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n usedDefaultOptions: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.statisticsSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n statisticsSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.axesSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n axesSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.layersSettings, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n layersSettings: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\nwatchDebounced(() => state.value.reactive.dataBindAes, (v) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n dataBindAes: copyJSON(v),\n };\n}, { deep: true, debounce: 1000 });\n\nwatchDebounced([\n () => state.value.reactive.chartScale,\n () => state.value.reactive.template,\n () => state.value.reactive.currentTab,\n], ([zoomState, template, currentTab]) => {\n graphMakerState.value = {\n ...graphMakerState.value,\n zoomState,\n template,\n currentTab,\n };\n}, { debounce: 1000 });\n\nwatch(() => graphMakerState.value.currentTab, (v) => {\n state.value.reactive.currentTab = v === undefined ? 'dataMapping' : v;\n});\n\nwatch(() => graphMakerState.value?.layersSettings?.dendro?.showTable, (v) => {\n state.value.reactive.layersSettings.dendro.showTable = v ?? false;\n});\n\nfunction onExport() {\n saveToFile(\n new Blob([\n chartRef.value?.export() ?? '',\n ]),\n 'chart.svg',\n );\n}\n\nfunction updateGraphTitle(nextTitle: string) {\n graphMakerState.value = {\n ...graphMakerState.value,\n title: nextTitle,\n };\n}\n\nfunction selectTreeNode(id: number | null) {\n state.value.reactive.dendroSelectedNodeId = id;\n chartRef.value?.updateChartState('selectedNode', id);\n}\n\nconst slots = useSlots();\n\nconst hasAnnotationsSlot = computed(() => Boolean(slots.annotationsSlot));\nconst hasSettingsSlot = computed(() => Boolean(slots.settingsSlot));\nconst hasLogSlot = computed(() => Boolean(slots.logSlot));\n\n</script>\n\n<template>\n <div class=\"graph-maker\">\n <div class=\"graph-maker__main-pane\">\n <Chart\n :graph-status=\"graphStatus\" :graphTitle=\"graphMakerState.title\" :chartData=\"chartCalculatedDataRef\"\n :chart-ref=\"chartRef\" :error-info=\"chartErrorInfo\" :dendroTooltipButton=\"tooltipButton\"\n :custom-status-text=\"statusText\"\n :allow-title-editing=\"allowTitleEditing\"\n :isScatterplotZoomChanged=\"isScatterplotZoomChanged\"\n @graph-title-update=\"updateGraphTitle\" @dendro-node-select=\"selectTreeNode\"\n @dendro-tooltip-btn-click=\"(id: string) => $emit('tooltip-btn-click', id)\"\n >\n <slot name=\"titleLineSlot\" />\n </Chart>\n <GraphStatusScreen v-if=\"isInitialLoading || isRunning\" :graphStatus=\"isRunning ? 'running' : 'loading'\" :top=\"67\" :left=\"12\" :right=\"12\" :bottom=\"12\" :customStatusText=\"statusText\" />\n <TransitionSlidePanel id=\"graph-settings-modal\">\n <PanelModal\n v-if=\"state.reactive.currentTab && !((isInitialLoading || isRunning) && isOwnGraphMakerTab(state.reactive.currentTab))\"\n @close=\"state.reactive.currentTab = null\"\n >\n <component :is=\"currentForm.value\">\n <slot v-if=\"state.reactive.currentTab === 'annotations'\" name=\"annotationsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'settings'\" name=\"settingsSlot\" />\n <slot v-if=\"state.reactive.currentTab === 'log'\" name=\"logSlot\" />\n </component>\n </PanelModal>\n </TransitionSlidePanel>\n </div>\n <VTabs\n v-model=\"state.reactive.currentTab\" :chart-type=\"state.reactive.chartType\" :graph-status=\"graphStatus\"\n :allowDeleting=\"allowChartDeleting\" :hasAnnotationsSlot=\"hasAnnotationsSlot\" :hasSettingsSlot=\"hasSettingsSlot\"\n :hasLogSlot=\"hasLogSlot\" :initialLoading=\"isInitialLoading || isRunning\" @export=\"onExport\"\n @delete=\"$emit('delete-this-graph')\"\n />\n <ChartErrorNotificationAlert v-if=\"chartErrorInfo?.type === 'unknownError'\" :errorInfo=\"chartErrorInfo\" />\n </div>\n</template>\n"],"names":["graphMakerState","_useModel","selectionState","__props","props","__expose","reset","dataStore","ref","watch","pframe","driver","_a","DemoDataStore","fixedOptions","value","oldValue","defaultOptions","v","state","provideStore","toRaw","nextReactiveState","createReactiveState","currentForm","computed","useSettingsForm","chartRef","shallowRef","chartCalculatedDataRef","chartError","chartErrorInfo","isRunning","isInitialLoading","graphStatus","previousStatus","inputGuide","chartData","_b","onTreeNodeClick","d","onTooltipHintSwitch","onLassoPolygonUpdate","dotIndexes","polygons","axesData","axisKeys","axisKey","idx","onLassoStateChange","chartRenderingInProgress","onLoadingStateChange","isScatterplotZoomChanged","onZoomChange","isZoomChanged","graphEventHandlers","updateChart","htmlNode","MiPlots","_c","_d","_e","chartDataForRender","composeChartSettings","onMounted","onUnmounted","watchDebounced","copyJSON","zoomState","template","currentTab","onExport","saveToFile","updateGraphTitle","nextTitle","selectTreeNode","id","slots","useSlots","hasAnnotationsSlot","hasSettingsSlot","hasLogSlot","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","Chart","_cache","$emit","_renderSlot","_ctx","_createBlock","GraphStatusScreen","TransitionSlidePanel","_unref","PanelModal","$event","_resolveDynamicComponent","VTabs","ChartErrorNotificationAlert"],"mappings":"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"}
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,qBAAqB,EAErB,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAyC,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACrG,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAEtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAUjD,OAAO,KAAK,EACV,eAAe,EAEf,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACf,eAAe,EACf,aAAa,EAAE,uBAAuB,EACvC,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AA6B1E,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,SAAS,GACnB,QAAQ,CAAC,aAAa,CAAC,CA0BzB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,EAAE;QACP,iBAAiB,EAAE,OAAO,CAAC;QAC3B,aAAa,EAAE,OAAO,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;QAClB,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,iBAAiB,EAAE;QACjB,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC;QACvE,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC;QACzE,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACxE,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC5F,CAAC;IACF,UAAU,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACnD,gBAAgB,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC5C,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACxC,SAAS,EAAE,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAC3C,gBAAgB,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC/C,qBAAqB,EAAE,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACzD,gBAAgB,EAAE,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;IACpD,cAAc,EAAE,eAAe,CAAC;CACjC;AAED,wBAAgB,YAAY,CAC1B,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EACtC,SAAS,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,EACpC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EACvC,SAAS,EAAE,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAC1C,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAC1F,gBAAgB,EAAE,GAAG,CAAC,uBAAuB,CAAC,EAC9C,qBAAqB,EAAE,GAAG,CAAC,4BAA4B,CAAC,EACxD,gBAAgB,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAClD,cAAc,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,EACnD,cAAc,CAAC,EAAE,OAAO,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACzE,KAAK,CAuDP;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;AAE/C,wBAAgB,YAAY,CAC1B,YAAY,EAAE,eAAe,EAC7B,YAAY,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,EACvC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,EACzD,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,EACrD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,EACpD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,EACpD,cAAc,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,EACnD,cAAc,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getControllerByType as L, getInitialStateByType as H } from "@milaboratories/pf-plots";
|
|
2
|
-
import { ref as r, computed as I, watch as g, toRaw as
|
|
2
|
+
import { ref as r, computed as I, watch as g, toRaw as O, provide as K, reactive as M, inject as k } from "vue";
|
|
3
3
|
import { getInitialAxesSettings as q, getInitialLayersSettings as z, getInitialStatisticsState as J, getInitialTemplate as V } from "./constantsCommon.js";
|
|
4
4
|
import { updateDataBindAes as W } from "./dataBindAes.js";
|
|
5
5
|
import { notEmpty as Q } from "./helpers.js";
|
|
@@ -51,7 +51,7 @@ function ut(e, a) {
|
|
|
51
51
|
showTooltipHint: !1
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
|
-
function
|
|
54
|
+
function lt(e, a, s, c, m, v, b, h, C, t) {
|
|
55
55
|
return {
|
|
56
56
|
reactive: e,
|
|
57
57
|
loading: M({
|
|
@@ -68,14 +68,14 @@ function st(e, a, s, c, m, f, b, C, h, t) {
|
|
|
68
68
|
primaryGroups: I(
|
|
69
69
|
() => x(
|
|
70
70
|
e.optionsState,
|
|
71
|
-
|
|
71
|
+
v.value,
|
|
72
72
|
"primaryGrouping"
|
|
73
73
|
)
|
|
74
74
|
),
|
|
75
75
|
secondaryGroups: I(
|
|
76
76
|
() => x(
|
|
77
77
|
e.optionsState,
|
|
78
|
-
|
|
78
|
+
v.value,
|
|
79
79
|
"secondaryGrouping"
|
|
80
80
|
)
|
|
81
81
|
),
|
|
@@ -95,18 +95,18 @@ function st(e, a, s, c, m, f, b, C, h, t) {
|
|
|
95
95
|
columnsDataStore: a,
|
|
96
96
|
inputGuide: s,
|
|
97
97
|
chartData: c,
|
|
98
|
-
uniqueValuesData:
|
|
98
|
+
uniqueValuesData: v,
|
|
99
99
|
filterSuggestionsData: b,
|
|
100
|
-
filterLabelsInfo:
|
|
101
|
-
readonlyInputs:
|
|
100
|
+
filterLabelsInfo: h,
|
|
101
|
+
readonlyInputs: C,
|
|
102
102
|
defaultPalette: {
|
|
103
103
|
categorical: typeof t == "object" && t.categorical ? t.categorical : typeof t == "string" ? t : Y,
|
|
104
104
|
continuous: typeof t == "object" && t.continuous ? t.continuous : typeof t == "string" ? t : X
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
|
-
function Gt(e, a, s, c, m,
|
|
109
|
-
const t = ut(e, s),
|
|
108
|
+
function Gt(e, a, s, c, m, v, b, h, C) {
|
|
109
|
+
const t = ut(e, s), f = L(t.chartType), y = r(L(t.chartType).getEmptyInputGuide(t.optionsState)), F = r(null), S = r({}), T = r({}), A = r({}), N = r(null), o = I(() => lt(
|
|
110
110
|
t,
|
|
111
111
|
a,
|
|
112
112
|
y,
|
|
@@ -115,60 +115,64 @@ function Gt(e, a, s, c, m, f, b, C, h) {
|
|
|
115
115
|
S,
|
|
116
116
|
T,
|
|
117
117
|
A,
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
h,
|
|
119
|
+
C
|
|
120
120
|
));
|
|
121
121
|
g(() => a.value, () => {
|
|
122
122
|
A.value = {}, S.value = {}, T.value = {};
|
|
123
123
|
});
|
|
124
|
-
const
|
|
124
|
+
const w = r(0);
|
|
125
125
|
g([
|
|
126
126
|
() => a.value,
|
|
127
127
|
() => c.value
|
|
128
|
-
], async ([n,
|
|
129
|
-
if (!
|
|
128
|
+
], async ([n, u]) => {
|
|
129
|
+
if (!u || (u == null ? void 0 : u.length) === 0 || !n)
|
|
130
130
|
return;
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
o.value.loading.defaults = !0, t.usedDefaultOptions === null && (o.value.loading.initialInputGuide = !
|
|
134
|
-
const i = await j(n,
|
|
135
|
-
if (
|
|
131
|
+
w.value++;
|
|
132
|
+
const l = w.value;
|
|
133
|
+
o.value.loading.defaults = !0, t.usedDefaultOptions === null && (o.value.loading.initialInputGuide = !0);
|
|
134
|
+
const i = await j(n, u, t.usedDefaultOptions);
|
|
135
|
+
if (w.value !== l)
|
|
136
136
|
return;
|
|
137
137
|
const { usedDefaultOptions: p, optionsState: d } = t;
|
|
138
|
-
|
|
138
|
+
if (!R(d, p, i)) {
|
|
139
|
+
o.value.loading.defaults = !1;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
o.value.loading.initialCharts = !0, t.optionsState.components = P(d, p, i), t.usedDefaultOptions = i;
|
|
139
143
|
}, { immediate: !0 });
|
|
140
|
-
const
|
|
144
|
+
const E = r(0);
|
|
141
145
|
g([
|
|
142
146
|
() => t.optionsState,
|
|
143
147
|
() => a.value,
|
|
144
148
|
() => m.value
|
|
145
|
-
], async ([n,
|
|
149
|
+
], async ([n, u, l]) => {
|
|
146
150
|
if (c.value === null || a.value === null)
|
|
147
151
|
return;
|
|
148
|
-
|
|
149
|
-
const i =
|
|
152
|
+
E.value++;
|
|
153
|
+
const i = E.value;
|
|
150
154
|
o.value.loading.inputGuide = !0;
|
|
151
|
-
const p =
|
|
152
|
-
i ===
|
|
155
|
+
const p = u && l ? Object.values(await j(u, l, null, !1)).flatMap((D) => D.map((U) => U.selectedSource)) : [], d = u ? await f.calculateOptions(O(u), n, p, v, b) : f.getEmptyInputGuide(n);
|
|
156
|
+
i === E.value && (y.value = d, o.value.loading.defaults = !1, o.value.loading.inputGuide = !1, o.value.loading.initialInputGuide && (o.value.loading.initialInputGuide = !1));
|
|
153
157
|
}, { immediate: !0, deep: !0 });
|
|
154
|
-
const
|
|
158
|
+
const B = r(0);
|
|
155
159
|
if (g(() => y.value, async (n) => {
|
|
156
|
-
|
|
157
|
-
const
|
|
160
|
+
B.value++;
|
|
161
|
+
const u = B.value;
|
|
158
162
|
o.value.loading.chartData = !0;
|
|
159
|
-
const
|
|
160
|
-
if (i &&
|
|
163
|
+
const l = O(a.value), i = await Z(n, t, l, m.value);
|
|
164
|
+
if (i && l) {
|
|
161
165
|
const { uniqueValues: p, filterSuggestions: d } = await et(
|
|
162
166
|
i,
|
|
163
167
|
n,
|
|
164
168
|
t.optionsState.components,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
169
|
+
f,
|
|
170
|
+
l,
|
|
171
|
+
O(T.value)
|
|
168
172
|
);
|
|
169
173
|
S.value = p, T.value = d, W(t.optionsState, t.dataBindAes, S.value);
|
|
170
174
|
}
|
|
171
|
-
A.value =
|
|
175
|
+
A.value = l ? await at(t.optionsState.components, n, f, l) : {}, u === B.value && (F.value = i, n.ready && (o.value.loading.initialCharts = !1), o.value.loading.chartData = !1);
|
|
172
176
|
}, { immediate: !0, deep: !0 }), t.chartType === "dendro") {
|
|
173
177
|
const n = r(0);
|
|
174
178
|
g([
|
|
@@ -176,13 +180,13 @@ function Gt(e, a, s, c, m, f, b, C, h) {
|
|
|
176
180
|
() => a.value,
|
|
177
181
|
() => y.value.readyData,
|
|
178
182
|
() => m.value
|
|
179
|
-
], async ([
|
|
180
|
-
if (i &&
|
|
183
|
+
], async ([u, l, i, p]) => {
|
|
184
|
+
if (i && l) {
|
|
181
185
|
n.value++;
|
|
182
186
|
const d = n.value;
|
|
183
187
|
o.value.loading.dendroTableData = !0;
|
|
184
|
-
const D = await $(
|
|
185
|
-
n.value === d && (N.value =
|
|
188
|
+
const D = await $(u, l, p), U = await f.createTableData(l, D);
|
|
189
|
+
n.value === d && (N.value = U), o.value.loading.dendroTableData = !1;
|
|
186
190
|
}
|
|
187
191
|
}, { immediate: !0 });
|
|
188
192
|
}
|
|
@@ -193,7 +197,7 @@ function bt() {
|
|
|
193
197
|
}
|
|
194
198
|
export {
|
|
195
199
|
ut as createReactiveState,
|
|
196
|
-
|
|
200
|
+
lt as factoryStore,
|
|
197
201
|
Gt as provideStore,
|
|
198
202
|
bt as useStore
|
|
199
203
|
};
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import type {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n getInitialStateByType,\n} from '@milaboratories/pf-plots';\nimport type { PColumnSpec } from '@platforma-sdk/model';\nimport type { CategoricalPalette, ContinuousPalette, Palette } from './components/AesSettings/types';\nimport type { ComputedRef, Reactive, Ref } from 'vue';\nimport { computed, inject, provide, reactive, ref, toRaw, watch } from 'vue';\nimport type { AesType } from './constantsCommon';\nimport {\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate,\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport type {\n DefaultPalettes,\n DendroNodeInfo,\n FilterLabelsInfoBySourceMap,\n FilterSuggestionsBySourceMap,\n GraphMakerProps,\n GraphMakerState,\n ReactiveState, UniqueValuesBySourceMap,\n} from './types';\nimport type { LoadedDefaultOptionsMap } from './utils';\nimport { createUpdatedWithNewDefaultsOptionsState, isOptionsStateNeedsToBeUpdated, loadDefaultSources } from './utils';\nimport { addFixedOptionsToState } from './utils/addFixedOptionsToState';\nimport { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';\nimport { copyJSON } from './utils/copyJSON';\nimport { loadDataForPlot } from './utils/createChartSettingsForRender/composeChartSettings';\nimport { getUsedAesInMapping } from './utils/getUsedAesInMapping';\nimport {\n getUniqueValuesFromReadyChartData,\n loadFilterLabelsForTitle,\n} from './utils/loadUniqueValuesToSave';\nimport type { FormKey } from './forms';\nimport { tabKeys } from './forms';\nimport { DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE } from './constantsAesthetic';\n\nfunction getInitialOptionsState(chartType: ChartType, optionsState: InputState | undefined) {\n const defaultState = copyJSON(getInitialStateByType(chartType));\n if (optionsState?.type !== chartType) {\n return defaultState;\n }\n const optionsStateCopy = copyJSON(optionsState);\n\n return {\n ...defaultState,\n ...optionsStateCopy,\n components: {\n ...defaultState.components,\n ...optionsStateCopy.components,\n },\n };\n}\n\nexport function createReactiveState(\n initialData: GraphMakerState,\n chartType: ChartType,\n): Reactive<ReactiveState> {\n return reactive({\n chartType: chartType,\n // from pf-plots\n optionsState: getInitialOptionsState(chartType, initialData.optionsState), // contains user selected inputs\n // previously used default options\n usedDefaultOptions: initialData.usedDefaultOptions ? copyJSON(initialData.usedDefaultOptions ?? {}) as LoadedDefaultOptionsMap<ChartType> : null,\n\n // local form states, updates directly in forms\n template: getInitialTemplate(initialData.template, chartType),\n statisticsSettings: getInitialStatisticsState(chartType, initialData.statisticsSettings),\n layersSettings: getInitialLayersSettings(initialData.layersSettings),\n axesSettings: getInitialAxesSettings(chartType, initialData.axesSettings),\n // common aesthetics data mapped on columns/axes values\n dataBindAes: copyJSON(initialData.dataBindAes ?? {}),\n chartScale: initialData.zoomState ?? 100,\n lassoControlsState: null,\n currentTab: initialData.currentTab === undefined ? 'dataMapping' : initialData.currentTab,\n tabDefaultState: tabKeys().reduce((res, formKey: FormKey) => {\n res[formKey] = {};\n return res;\n }, {} as Record<FormKey, Record<string, boolean>>),\n dendroInfoByClick: null as null | DendroNodeInfo,\n dendroSelectedNodeId: null,\n showTooltipHint: false,\n });\n}\n\nexport interface Store {\n reactive: Reactive<ReactiveState>;\n loading: {\n initialInputGuide: boolean;\n initialCharts: boolean;\n initialDefaults: boolean;\n inputGuide: boolean;\n chartData: boolean;\n defaults: boolean;\n chartRendering: boolean;\n dendroTableData: boolean;\n };\n commonHelpersData: {\n primaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n secondaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n usedAesInMapping: ComputedRef<Record<string, Record<AesType, boolean>>>;\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>;\n };\n controller: ReturnType<typeof getControllerByType>;\n columnsDataStore: Ref<DemoDataStore | null>;\n inputGuide: Ref<InputGuide<InputState>>;\n chartData: Ref<PlotDataAndSettings | null>;\n uniqueValuesData: Ref<UniqueValuesBySourceMap>;\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>;\n readonlyInputs?: InputNamesByChartType[ChartType][];\n defaultPalette: DefaultPalettes;\n}\n\nexport function factoryStore(\n reactiveState: Reactive<ReactiveState>,\n dataStore: Ref<DemoDataStore | null>,\n inputGuide: Ref<InputGuide<InputState>>,\n chartData: Ref<PlotDataAndSettings | null>,\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>,\n uniqueValuesData: Ref<UniqueValuesBySourceMap>,\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>,\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: Palette | { categorical?: Palette; continuous?: Palette },\n): Store {\n return {\n reactive: reactiveState,\n loading: reactive({\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n defaults: false,\n chartRendering: false,\n dendroTableData: false,\n }),\n commonHelpersData: {\n primaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'primaryGrouping',\n ),\n ),\n secondaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'secondaryGrouping',\n ),\n ),\n usedAesInMapping: computed<Record<string, Record<AesType, boolean>>>(() =>\n getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide.value,\n ),\n ),\n dendroTableData,\n },\n controller: getControllerByType(reactiveState.chartType),\n columnsDataStore: dataStore,\n inputGuide,\n chartData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette: {\n categorical: typeof defaultPalette === 'object' && defaultPalette.categorical\n ? defaultPalette.categorical as CategoricalPalette\n : typeof defaultPalette === 'string' ? defaultPalette as CategoricalPalette : DEFAULT_CATEGORICAL_PALETTE,\n continuous: typeof defaultPalette === 'object' && defaultPalette.continuous\n ? defaultPalette.continuous as ContinuousPalette\n : typeof defaultPalette === 'string' ? defaultPalette as ContinuousPalette : DEFAULT_CONTINUOUS_PALETTE,\n },\n };\n}\n\nexport type ComputedStore = ComputedRef<Store>;\n\nexport function provideStore(\n initialState: GraphMakerState,\n dataStoreRef: Ref<DemoDataStore | null>,\n chartType: ChartType,\n defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>,\n fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>,\n dataColumnPredicate?: (spec: PColumnSpec) => boolean,\n metaColumnPredicate?: (spec: PColumnSpec) => boolean,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: GraphMakerProps['defaultPalette'],\n) {\n const reactiveState = createReactiveState(initialState, chartType);\n const controller = getControllerByType(reactiveState.chartType);\n\n const inputGuide = ref<InputGuide<InputState>>(getControllerByType(reactiveState.chartType).getEmptyInputGuide(reactiveState.optionsState));\n const chartData = ref<PlotDataAndSettings | null>(null);\n\n const uniqueValuesData = ref<UniqueValuesBySourceMap>({});\n const filterSuggestionsData = ref<FilterSuggestionsBySourceMap>({});\n const filterLabelsInfo = ref<FilterLabelsInfoBySourceMap>({}); // for auto titles of chart if something selected in filter/tabby\n\n const dendroTableData = ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>(null);\n\n // toRaw removes Vue proxy from dataStore.pframe (PFrame api)\n const store = computed(() => factoryStore(\n reactiveState,\n dataStoreRef,\n inputGuide,\n chartData,\n dendroTableData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette,\n ));\n\n watch(() => dataStoreRef.value, () => {\n filterLabelsInfo.value = {};\n uniqueValuesData.value = {};\n filterSuggestionsData.value = {}; // reset saved data; avoid caching of empty results from old empty pframe\n });\n\n const defaultOptionsCounter = ref(0);\n watch([\n () => dataStoreRef.value,\n () => defaultOptionsRef.value,\n ], async ([ds, defaultOptions]) => {\n if (!defaultOptions || !ds) {\n return;\n }\n defaultOptionsCounter.value++;\n const counter = defaultOptionsCounter.value;\n store.value.loading.defaults = true;\n if (reactiveState.usedDefaultOptions === null) {\n store.value.loading.initialInputGuide = false;\n }\n const loadedDefaultOptions = await loadDefaultSources(ds, defaultOptions);\n if (defaultOptionsCounter.value !== counter) {\n return;\n }\n const { usedDefaultOptions, optionsState } = reactiveState;\n const needsToBeUpdated = isOptionsStateNeedsToBeUpdated(optionsState, usedDefaultOptions, loadedDefaultOptions);\n if (!needsToBeUpdated) {\n return;\n }\n store.value.loading.initialCharts = true; // we want to show loader when default are really changed and new chart data is requested\n reactiveState.optionsState.components = createUpdatedWithNewDefaultsOptionsState(optionsState, usedDefaultOptions, loadedDefaultOptions);\n reactiveState.usedDefaultOptions = loadedDefaultOptions;\n store.value.loading.defaults = false;\n }, { immediate: true });\n\n // recalculate input guide - options for every data input, consistency info etc\n const inputGuideCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState,\n () => dataStoreRef.value,\n () => fixedOptionsRef.value,\n ], async ([optionsState, ds, fixedOptions]) => {\n if (defaultOptionsRef.value === null || dataStoreRef.value === null) { // they are not ready, waiting for them\n return;\n }\n inputGuideCounter.value++;\n const counter = inputGuideCounter.value;\n store.value.loading.inputGuide = true;\n const ignoredIds = ds && fixedOptions ? Object.values(await loadDefaultSources(ds, fixedOptions, false)).flatMap((item) => item.map((s) => s.selectedSource)) : [];\n\n // const start = Date.now();\n const nextInputGuide = ds ? await controller.calculateOptions(toRaw(ds), optionsState, ignoredIds, dataColumnPredicate, metaColumnPredicate) : controller.getEmptyInputGuide(optionsState);\n // console.log('input guide', Date.now() - start);\n\n if (counter === inputGuideCounter.value) { // race condition check\n inputGuide.value = nextInputGuide;\n\n store.value.loading.inputGuide = false;\n if (store.value.loading.initialInputGuide) {\n store.value.loading.initialInputGuide = false;\n }\n }\n }, { immediate: true, deep: true });\n\n // recalculate data for chart rendering (miplots4)\n const chartDataCounter = ref(0); // to avoid race condition on async calculations\n watch(() => inputGuide.value, async (ig) => {\n chartDataCounter.value++;\n const counter = chartDataCounter.value;\n\n store.value.loading.chartData = true;\n\n const ds = toRaw(dataStoreRef.value);\n // const start = Date.now();\n const nextChartData = await loadDataForPlot(ig, reactiveState, ds, fixedOptionsRef.value);\n\n if (nextChartData && ds) {\n const { uniqueValues, filterSuggestions } = await getUniqueValuesFromReadyChartData(\n nextChartData, ig, reactiveState.optionsState.components, controller, ds, toRaw(filterSuggestionsData.value),\n );\n uniqueValuesData.value = uniqueValues;\n filterSuggestionsData.value = filterSuggestions;\n updateDataBindAes(reactiveState.optionsState, reactiveState.dataBindAes, uniqueValuesData.value);\n }\n filterLabelsInfo.value = ds\n ? await loadFilterLabelsForTitle(reactiveState.optionsState.components, ig, controller, ds)\n : {};\n // console.log('chart data', Date.now() - start);\n\n if (counter === chartDataCounter.value) { // race condition check\n chartData.value = nextChartData;\n if (ig.ready) {\n store.value.loading.initialCharts = false;\n }\n store.value.loading.chartData = false;\n }\n }, { immediate: true, deep: true });\n\n // watch data for table, only dendro chart; data is also using for popup by tree node click\n if (reactiveState.chartType === 'dendro') {\n const dendroDataCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState as DendroUIState,\n () => dataStoreRef.value,\n () => inputGuide.value.readyData,\n () => fixedOptionsRef.value,\n ], async ([optionsState, dataStore, ready, fixed]) => {\n if (ready && dataStore) {\n dendroDataCounter.value++;\n const counter = dendroDataCounter.value;\n store.value.loading.dendroTableData = true;\n const state = await addFixedOptionsToState(optionsState, dataStore, fixed) as DendroUIState;\n const nextDendroTableData = await (controller as unknown as DendroStateController).createTableData(dataStore, state);\n\n if (dendroDataCounter.value === counter) {\n dendroTableData.value = nextDendroTableData;\n }\n store.value.loading.dendroTableData = false;\n }\n }, { immediate: true });\n }\n\n provide(storeKey, store);\n return store;\n}\n\nexport function useStore() {\n return notEmpty(inject<ComputedStore>(storeKey), 'Empty store');\n}\n"],"names":["getInitialOptionsState","chartType","optionsState","defaultState","copyJSON","getInitialStateByType","optionsStateCopy","createReactiveState","initialData","reactive","getInitialTemplate","getInitialStatisticsState","getInitialLayersSettings","getInitialAxesSettings","tabKeys","res","formKey","factoryStore","reactiveState","dataStore","inputGuide","chartData","dendroTableData","uniqueValuesData","filterSuggestionsData","filterLabelsInfo","readonlyInputs","defaultPalette","computed","calculateDiscreteGroups","getUsedAesInMapping","getControllerByType","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","provideStore","initialState","dataStoreRef","defaultOptionsRef","fixedOptionsRef","dataColumnPredicate","metaColumnPredicate","controller","ref","store","watch","defaultOptionsCounter","ds","defaultOptions","counter","loadedDefaultOptions","loadDefaultSources","usedDefaultOptions","isOptionsStateNeedsToBeUpdated","createUpdatedWithNewDefaultsOptionsState","inputGuideCounter","fixedOptions","ignoredIds","item","s","nextInputGuide","toRaw","chartDataCounter","ig","nextChartData","loadDataForPlot","uniqueValues","filterSuggestions","getUniqueValuesFromReadyChartData","updateDataBindAes","loadFilterLabelsForTitle","dendroDataCounter","ready","fixed","state","addFixedOptionsToState","nextDendroTableData","provide","storeKey","useStore","notEmpty","inject"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../src/store.ts"],"sourcesContent":["import type {\n ChartType,\n DemoDataStore,\n DendroStateController,\n DendroUIState,\n InputGuide,\n InputNamesByChartType,\n InputState,\n PlotDataAndSettings,\n} from '@milaboratories/pf-plots';\nimport {\n getControllerByType,\n getInitialStateByType,\n} from '@milaboratories/pf-plots';\nimport type { PColumnSpec } from '@platforma-sdk/model';\nimport type { CategoricalPalette, ContinuousPalette, Palette } from './components/AesSettings/types';\nimport type { ComputedRef, Reactive, Ref } from 'vue';\nimport { computed, inject, provide, reactive, ref, toRaw, watch } from 'vue';\nimport type { AesType } from './constantsCommon';\nimport {\n getInitialAxesSettings,\n getInitialLayersSettings,\n getInitialStatisticsState,\n getInitialTemplate,\n} from './constantsCommon';\nimport { updateDataBindAes } from './dataBindAes';\nimport { notEmpty } from './helpers';\nimport { storeKey } from './keys';\nimport type {\n DefaultPalettes,\n DendroNodeInfo,\n FilterLabelsInfoBySourceMap,\n FilterSuggestionsBySourceMap,\n GraphMakerProps,\n GraphMakerState,\n ReactiveState, UniqueValuesBySourceMap,\n} from './types';\nimport type { LoadedDefaultOptionsMap } from './utils';\nimport { createUpdatedWithNewDefaultsOptionsState, isOptionsStateNeedsToBeUpdated, loadDefaultSources } from './utils';\nimport { addFixedOptionsToState } from './utils/addFixedOptionsToState';\nimport { calculateDiscreteGroups } from './utils/calculateDiscreteGroups';\nimport { copyJSON } from './utils/copyJSON';\nimport { loadDataForPlot } from './utils/createChartSettingsForRender/composeChartSettings';\nimport { getUsedAesInMapping } from './utils/getUsedAesInMapping';\nimport {\n getUniqueValuesFromReadyChartData,\n loadFilterLabelsForTitle,\n} from './utils/loadUniqueValuesToSave';\nimport type { FormKey } from './forms';\nimport { tabKeys } from './forms';\nimport { DEFAULT_CATEGORICAL_PALETTE, DEFAULT_CONTINUOUS_PALETTE } from './constantsAesthetic';\n\nfunction getInitialOptionsState(chartType: ChartType, optionsState: InputState | undefined) {\n const defaultState = copyJSON(getInitialStateByType(chartType));\n if (optionsState?.type !== chartType) {\n return defaultState;\n }\n const optionsStateCopy = copyJSON(optionsState);\n\n return {\n ...defaultState,\n ...optionsStateCopy,\n components: {\n ...defaultState.components,\n ...optionsStateCopy.components,\n },\n };\n}\n\nexport function createReactiveState(\n initialData: GraphMakerState,\n chartType: ChartType,\n): Reactive<ReactiveState> {\n return reactive({\n chartType: chartType,\n // from pf-plots\n optionsState: getInitialOptionsState(chartType, initialData.optionsState), // contains user selected inputs\n // previously used default options\n usedDefaultOptions: initialData.usedDefaultOptions ? copyJSON(initialData.usedDefaultOptions ?? {}) as LoadedDefaultOptionsMap<ChartType> : null,\n\n // local form states, updates directly in forms\n template: getInitialTemplate(initialData.template, chartType),\n statisticsSettings: getInitialStatisticsState(chartType, initialData.statisticsSettings),\n layersSettings: getInitialLayersSettings(initialData.layersSettings),\n axesSettings: getInitialAxesSettings(chartType, initialData.axesSettings),\n // common aesthetics data mapped on columns/axes values\n dataBindAes: copyJSON(initialData.dataBindAes ?? {}),\n chartScale: initialData.zoomState ?? 100,\n lassoControlsState: null,\n currentTab: initialData.currentTab === undefined ? 'dataMapping' : initialData.currentTab,\n tabDefaultState: tabKeys().reduce((res, formKey: FormKey) => {\n res[formKey] = {};\n return res;\n }, {} as Record<FormKey, Record<string, boolean>>),\n dendroInfoByClick: null as null | DendroNodeInfo,\n dendroSelectedNodeId: null,\n showTooltipHint: false,\n });\n}\n\nexport interface Store {\n reactive: Reactive<ReactiveState>;\n loading: {\n initialInputGuide: boolean;\n initialCharts: boolean;\n initialDefaults: boolean;\n inputGuide: boolean;\n chartData: boolean;\n defaults: boolean;\n chartRendering: boolean;\n dendroTableData: boolean;\n };\n commonHelpersData: {\n primaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n secondaryGroups: ComputedRef<ReturnType<typeof calculateDiscreteGroups>>;\n usedAesInMapping: ComputedRef<Record<string, Record<AesType, boolean>>>;\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>;\n };\n controller: ReturnType<typeof getControllerByType>;\n columnsDataStore: Ref<DemoDataStore | null>;\n inputGuide: Ref<InputGuide<InputState>>;\n chartData: Ref<PlotDataAndSettings | null>;\n uniqueValuesData: Ref<UniqueValuesBySourceMap>;\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>;\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>;\n readonlyInputs?: InputNamesByChartType[ChartType][];\n defaultPalette: DefaultPalettes;\n}\n\nexport function factoryStore(\n reactiveState: Reactive<ReactiveState>,\n dataStore: Ref<DemoDataStore | null>,\n inputGuide: Ref<InputGuide<InputState>>,\n chartData: Ref<PlotDataAndSettings | null>,\n dendroTableData: Ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>,\n uniqueValuesData: Ref<UniqueValuesBySourceMap>,\n filterSuggestionsData: Ref<FilterSuggestionsBySourceMap>,\n filterLabelsInfo: Ref<FilterLabelsInfoBySourceMap>,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: Palette | { categorical?: Palette; continuous?: Palette },\n): Store {\n return {\n reactive: reactiveState,\n loading: reactive({\n initialInputGuide: true,\n initialCharts: true,\n initialDefaults: true,\n inputGuide: false,\n chartData: false,\n defaults: false,\n chartRendering: false,\n dendroTableData: false,\n }),\n commonHelpersData: {\n primaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'primaryGrouping',\n ),\n ),\n secondaryGroups: computed(() => calculateDiscreteGroups(\n reactiveState.optionsState,\n uniqueValuesData.value,\n 'secondaryGrouping',\n ),\n ),\n usedAesInMapping: computed<Record<string, Record<AesType, boolean>>>(() =>\n getUsedAesInMapping(\n reactiveState.chartType,\n reactiveState.template,\n reactiveState.layersSettings,\n reactiveState.statisticsSettings,\n reactiveState.optionsState,\n inputGuide.value,\n ),\n ),\n dendroTableData,\n },\n controller: getControllerByType(reactiveState.chartType),\n columnsDataStore: dataStore,\n inputGuide,\n chartData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette: {\n categorical: typeof defaultPalette === 'object' && defaultPalette.categorical\n ? defaultPalette.categorical as CategoricalPalette\n : typeof defaultPalette === 'string' ? defaultPalette as CategoricalPalette : DEFAULT_CATEGORICAL_PALETTE,\n continuous: typeof defaultPalette === 'object' && defaultPalette.continuous\n ? defaultPalette.continuous as ContinuousPalette\n : typeof defaultPalette === 'string' ? defaultPalette as ContinuousPalette : DEFAULT_CONTINUOUS_PALETTE,\n },\n };\n}\n\nexport type ComputedStore = ComputedRef<Store>;\n\nexport function provideStore(\n initialState: GraphMakerState,\n dataStoreRef: Ref<DemoDataStore | null>,\n chartType: ChartType,\n defaultOptionsRef: Ref<GraphMakerProps['defaultOptions']>,\n fixedOptionsRef: Ref<GraphMakerProps['fixedOptions']>,\n dataColumnPredicate?: (spec: PColumnSpec) => boolean,\n metaColumnPredicate?: (spec: PColumnSpec) => boolean,\n readonlyInputs?: InputNamesByChartType[ChartType][],\n defaultPalette?: GraphMakerProps['defaultPalette'],\n) {\n const reactiveState = createReactiveState(initialState, chartType);\n const controller = getControllerByType(reactiveState.chartType);\n\n const inputGuide = ref<InputGuide<InputState>>(getControllerByType(reactiveState.chartType).getEmptyInputGuide(reactiveState.optionsState));\n const chartData = ref<PlotDataAndSettings | null>(null);\n\n const uniqueValuesData = ref<UniqueValuesBySourceMap>({});\n const filterSuggestionsData = ref<FilterSuggestionsBySourceMap>({});\n const filterLabelsInfo = ref<FilterLabelsInfoBySourceMap>({}); // for auto titles of chart if something selected in filter/tabby\n\n const dendroTableData = ref<Awaited<ReturnType<DendroStateController['createTableData']>> | null>(null);\n\n // toRaw removes Vue proxy from dataStore.pframe (PFrame api)\n const store = computed(() => factoryStore(\n reactiveState,\n dataStoreRef,\n inputGuide,\n chartData,\n dendroTableData,\n uniqueValuesData,\n filterSuggestionsData,\n filterLabelsInfo,\n readonlyInputs,\n defaultPalette,\n ));\n\n watch(() => dataStoreRef.value, () => {\n filterLabelsInfo.value = {};\n uniqueValuesData.value = {};\n filterSuggestionsData.value = {}; // reset saved data; avoid caching of empty results from old empty pframe\n });\n\n const defaultOptionsCounter = ref(0);\n watch([\n () => dataStoreRef.value,\n () => defaultOptionsRef.value,\n ], async ([ds, defaultOptions]) => {\n if (!defaultOptions || defaultOptions?.length === 0 || !ds) {\n return;\n }\n defaultOptionsCounter.value++;\n const counter = defaultOptionsCounter.value;\n store.value.loading.defaults = true;\n if (reactiveState.usedDefaultOptions === null) {\n store.value.loading.initialInputGuide = true;\n }\n const loadedDefaultOptions = await loadDefaultSources(ds, defaultOptions, reactiveState.usedDefaultOptions);\n if (defaultOptionsCounter.value !== counter) {\n return;\n }\n const { usedDefaultOptions, optionsState } = reactiveState;\n const needsToBeUpdated = isOptionsStateNeedsToBeUpdated(optionsState, usedDefaultOptions, loadedDefaultOptions);\n if (!needsToBeUpdated) {\n store.value.loading.defaults = false;\n return;\n }\n store.value.loading.initialCharts = true; // we want to show loader when default are really changed and new chart data is requested\n reactiveState.optionsState.components = createUpdatedWithNewDefaultsOptionsState(optionsState, usedDefaultOptions, loadedDefaultOptions);\n reactiveState.usedDefaultOptions = loadedDefaultOptions;\n }, { immediate: true });\n\n // recalculate input guide - options for every data input, consistency info etc\n const inputGuideCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState,\n () => dataStoreRef.value,\n () => fixedOptionsRef.value,\n ], async ([optionsState, ds, fixedOptions]) => {\n if (defaultOptionsRef.value === null || dataStoreRef.value === null) { // they are not ready, waiting for them\n return;\n }\n inputGuideCounter.value++;\n const counter = inputGuideCounter.value;\n store.value.loading.inputGuide = true;\n const ignoredIds = ds && fixedOptions ? Object.values(await loadDefaultSources(ds, fixedOptions, null, false)).flatMap((item) => item.map((s) => s.selectedSource)) : [];\n\n // const start = Date.now();\n const nextInputGuide = ds ? await controller.calculateOptions(toRaw(ds), optionsState, ignoredIds, dataColumnPredicate, metaColumnPredicate) : controller.getEmptyInputGuide(optionsState);\n // console.log('input guide', Date.now() - start);\n\n if (counter === inputGuideCounter.value) { // race condition check\n inputGuide.value = nextInputGuide;\n\n store.value.loading.defaults = false;\n store.value.loading.inputGuide = false;\n if (store.value.loading.initialInputGuide) {\n store.value.loading.initialInputGuide = false;\n }\n }\n }, { immediate: true, deep: true });\n\n // recalculate data for chart rendering (miplots4)\n const chartDataCounter = ref(0); // to avoid race condition on async calculations\n watch(() => inputGuide.value, async (ig) => {\n chartDataCounter.value++;\n const counter = chartDataCounter.value;\n\n store.value.loading.chartData = true;\n\n const ds = toRaw(dataStoreRef.value);\n // const start = Date.now();\n const nextChartData = await loadDataForPlot(ig, reactiveState, ds, fixedOptionsRef.value);\n\n if (nextChartData && ds) {\n const { uniqueValues, filterSuggestions } = await getUniqueValuesFromReadyChartData(\n nextChartData, ig, reactiveState.optionsState.components, controller, ds, toRaw(filterSuggestionsData.value),\n );\n uniqueValuesData.value = uniqueValues;\n filterSuggestionsData.value = filterSuggestions;\n updateDataBindAes(reactiveState.optionsState, reactiveState.dataBindAes, uniqueValuesData.value);\n }\n filterLabelsInfo.value = ds\n ? await loadFilterLabelsForTitle(reactiveState.optionsState.components, ig, controller, ds)\n : {};\n // console.log('chart data', Date.now() - start);\n\n if (counter === chartDataCounter.value) { // race condition check\n chartData.value = nextChartData;\n if (ig.ready) {\n store.value.loading.initialCharts = false;\n }\n store.value.loading.chartData = false;\n }\n }, { immediate: true, deep: true });\n\n // watch data for table, only dendro chart; data is also using for popup by tree node click\n if (reactiveState.chartType === 'dendro') {\n const dendroDataCounter = ref(0); // to avoid race condition on async calculations\n watch([\n () => reactiveState.optionsState as DendroUIState,\n () => dataStoreRef.value,\n () => inputGuide.value.readyData,\n () => fixedOptionsRef.value,\n ], async ([optionsState, dataStore, ready, fixed]) => {\n if (ready && dataStore) {\n dendroDataCounter.value++;\n const counter = dendroDataCounter.value;\n store.value.loading.dendroTableData = true;\n const state = (await addFixedOptionsToState(optionsState, dataStore, fixed)) as DendroUIState;\n const nextDendroTableData = await (controller as unknown as DendroStateController).createTableData(dataStore, state);\n\n if (dendroDataCounter.value === counter) {\n dendroTableData.value = nextDendroTableData;\n }\n store.value.loading.dendroTableData = false;\n }\n }, { immediate: true });\n }\n\n provide(storeKey, store);\n return store;\n}\n\nexport function useStore() {\n return notEmpty(inject<ComputedStore>(storeKey), 'Empty store');\n}\n"],"names":["getInitialOptionsState","chartType","optionsState","defaultState","copyJSON","getInitialStateByType","optionsStateCopy","createReactiveState","initialData","reactive","getInitialTemplate","getInitialStatisticsState","getInitialLayersSettings","getInitialAxesSettings","tabKeys","res","formKey","factoryStore","reactiveState","dataStore","inputGuide","chartData","dendroTableData","uniqueValuesData","filterSuggestionsData","filterLabelsInfo","readonlyInputs","defaultPalette","computed","calculateDiscreteGroups","getUsedAesInMapping","getControllerByType","DEFAULT_CATEGORICAL_PALETTE","DEFAULT_CONTINUOUS_PALETTE","provideStore","initialState","dataStoreRef","defaultOptionsRef","fixedOptionsRef","dataColumnPredicate","metaColumnPredicate","controller","ref","store","watch","defaultOptionsCounter","ds","defaultOptions","counter","loadedDefaultOptions","loadDefaultSources","usedDefaultOptions","isOptionsStateNeedsToBeUpdated","createUpdatedWithNewDefaultsOptionsState","inputGuideCounter","fixedOptions","ignoredIds","item","s","nextInputGuide","toRaw","chartDataCounter","ig","nextChartData","loadDataForPlot","uniqueValues","filterSuggestions","getUniqueValuesFromReadyChartData","updateDataBindAes","loadFilterLabelsForTitle","dendroDataCounter","ready","fixed","state","addFixedOptionsToState","nextDendroTableData","provide","storeKey","useStore","notEmpty","inject"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { copyJSON as a } from "./copyJSON.js";
|
|
2
|
-
import { loadDefaultSources as
|
|
3
|
-
async function
|
|
2
|
+
import { loadDefaultSources as l } from "./loadDefaultSources.js";
|
|
3
|
+
async function u(o, r, t) {
|
|
4
4
|
if (!t || t.length === 0)
|
|
5
5
|
return o;
|
|
6
|
-
const s = await
|
|
6
|
+
const s = await l(r, t, null, !1), e = a(o);
|
|
7
7
|
for (const [n, c] of Object.entries(s))
|
|
8
8
|
o.components[n] && e.components[n].selectorStates.push(...c);
|
|
9
9
|
return e;
|
|
10
10
|
}
|
|
11
11
|
export {
|
|
12
|
-
|
|
12
|
+
u as addFixedOptionsToState
|
|
13
13
|
};
|
|
14
14
|
//# sourceMappingURL=addFixedOptionsToState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addFixedOptionsToState.js","sources":["../../src/utils/addFixedOptionsToState.ts"],"sourcesContent":["import type { GraphMakerProps } from '../types';\nimport { copyJSON } from './copyJSON';\nimport type { DemoDataStore, InputState, SelectorStateFilter } from '@milaboratories/pf-plots';\nimport { loadDefaultSources } from './loadDefaultSources';\n\n// hidden options that are always in the state but not visible to the user\nexport async function addFixedOptionsToState(\n state: InputState,\n dataStore: DemoDataStore,\n fixedOptions: GraphMakerProps['fixedOptions'],\n): Promise<InputState> {\n if (!fixedOptions || fixedOptions.length === 0) {\n return state;\n }\n const loadedFixedOptions = await loadDefaultSources(dataStore, fixedOptions, false);\n const res: InputState = copyJSON(state);\n for (const [inputName, selectorStates] of Object.entries(loadedFixedOptions)) {\n if (state.components[inputName]) {\n res.components[inputName].selectorStates.push(...selectorStates as SelectorStateFilter[]);\n }\n }\n return res;\n}\n"],"names":["addFixedOptionsToState","state","dataStore","fixedOptions","loadedFixedOptions","loadDefaultSources","res","copyJSON","inputName","selectorStates"],"mappings":";;AAMA,eAAsBA,EACpBC,GACAC,GACAC,GACqB;AACrB,MAAI,CAACA,KAAgBA,EAAa,WAAW;AAC3C,WAAOF;AAET,QAAMG,IAAqB,MAAMC,EAAmBH,GAAWC,GAAc,EAAK,
|
|
1
|
+
{"version":3,"file":"addFixedOptionsToState.js","sources":["../../src/utils/addFixedOptionsToState.ts"],"sourcesContent":["import type { GraphMakerProps } from '../types';\nimport { copyJSON } from './copyJSON';\nimport type { DemoDataStore, InputState, SelectorStateFilter } from '@milaboratories/pf-plots';\nimport { loadDefaultSources } from './loadDefaultSources';\n\n// hidden options that are always in the state but not visible to the user\nexport async function addFixedOptionsToState(\n state: InputState,\n dataStore: DemoDataStore,\n fixedOptions: GraphMakerProps['fixedOptions'],\n): Promise<InputState> {\n if (!fixedOptions || fixedOptions.length === 0) {\n return state;\n }\n const loadedFixedOptions = await loadDefaultSources(dataStore, fixedOptions, null, false);\n const res: InputState = copyJSON(state);\n for (const [inputName, selectorStates] of Object.entries(loadedFixedOptions)) {\n if (state.components[inputName]) {\n res.components[inputName].selectorStates.push(...selectorStates as SelectorStateFilter[]);\n }\n }\n return res;\n}\n"],"names":["addFixedOptionsToState","state","dataStore","fixedOptions","loadedFixedOptions","loadDefaultSources","res","copyJSON","inputName","selectorStates"],"mappings":";;AAMA,eAAsBA,EACpBC,GACAC,GACAC,GACqB;AACrB,MAAI,CAACA,KAAgBA,EAAa,WAAW;AAC3C,WAAOF;AAET,QAAMG,IAAqB,MAAMC,EAAmBH,GAAWC,GAAc,MAAM,EAAK,GAClFG,IAAkBC,EAASN,CAAK;AACtC,aAAW,CAACO,GAAWC,CAAc,KAAK,OAAO,QAAQL,CAAkB;AACzE,IAAIH,EAAM,WAAWO,CAAS,KAC5BF,EAAI,WAAWE,CAAS,EAAE,eAAe,KAAK,GAAGC,CAAuC;AAG5F,SAAOH;AACT;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChartType, DemoDataStore, InputNamesByChartType, InputState, SelectorStateFilter, SelectorStateSimple } from '@milaboratories/pf-plots';
|
|
2
2
|
import { PredefinedGraphOption } from '../types';
|
|
3
3
|
export type LoadedDefaultOptionsMap<T extends ChartType> = Record<InputNamesByChartType[T], (SelectorStateFilter | SelectorStateSimple)[]>;
|
|
4
|
-
export declare function loadDefaultSources(dataStore: DemoDataStore, defaultOptions: PredefinedGraphOption<ChartType>[], considerAxisDomains?: boolean): Promise<LoadedDefaultOptionsMap<ChartType>>;
|
|
4
|
+
export declare function loadDefaultSources(dataStore: DemoDataStore, defaultOptions: PredefinedGraphOption<ChartType>[], usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null, considerAxisDomains?: boolean): Promise<LoadedDefaultOptionsMap<ChartType>>;
|
|
5
5
|
export declare function isOptionsStateNeedsToBeUpdated(state: InputState, usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null, newDefaultOptions: LoadedDefaultOptionsMap<ChartType>): boolean;
|
|
6
6
|
export declare function createUpdatedWithNewDefaultsOptionsState(state: InputState, usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null, newDefaultOptions: LoadedDefaultOptionsMap<ChartType>): InputState['components'];
|
|
7
7
|
//# sourceMappingURL=loadDefaultSources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadDefaultSources.d.ts","sourceRoot":"","sources":["../../src/utils/loadDefaultSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAetD,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loadDefaultSources.d.ts","sourceRoot":"","sources":["../../src/utils/loadDefaultSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAET,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAetD,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAiG3I,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,EAClD,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,mBAAmB,UAAO,GACzB,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAqG7C;AA4BD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,UAAU,EACjB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GACpD,OAAO,CAsBT;AAED,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,UAAU,EACjB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAC7D,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,GACpD,UAAU,CAAC,YAAY,CAAC,CAY1B"}
|
|
@@ -1,102 +1,145 @@
|
|
|
1
|
-
import { AxisId as
|
|
2
|
-
import { readAnnotation as
|
|
3
|
-
import { toRaw as
|
|
4
|
-
import { copyJSON as
|
|
5
|
-
import { isJsonEqual as
|
|
6
|
-
function
|
|
1
|
+
import { AxisId as w } from "@milaboratories/pf-plots";
|
|
2
|
+
import { readAnnotation as b, Annotation as B } from "@platforma-sdk/model";
|
|
3
|
+
import { toRaw as A } from "vue";
|
|
4
|
+
import { copyJSON as I } from "./copyJSON.js";
|
|
5
|
+
import { isJsonEqual as P } from "@milaboratories/helpers";
|
|
6
|
+
function k(t, n) {
|
|
7
7
|
if (typeof t > "u")
|
|
8
8
|
return !0;
|
|
9
|
-
const
|
|
10
|
-
return typeof n > "u" ?
|
|
9
|
+
const r = Object.keys(t);
|
|
10
|
+
return typeof n > "u" ? r.length === 0 : r.every((i) => n[i]);
|
|
11
11
|
}
|
|
12
|
-
function
|
|
13
|
-
return n &&
|
|
12
|
+
function U(t, n, r, i) {
|
|
13
|
+
return n && b(n, B.IsSubset) ? "subset" : i !== void 0 ? "range" : r !== void 0 || t === "Int" || t === "String" ? "equals" : "range";
|
|
14
14
|
}
|
|
15
|
-
async function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
async function N(t, n, r, i) {
|
|
16
|
+
var o;
|
|
17
|
+
const l = (o = r == null ? void 0 : r[n]) == null ? void 0 : o.find((s) => s.selectedSource === i.toCanonicalString());
|
|
18
|
+
if (l && h(l) && l.type === "equals") {
|
|
19
|
+
const s = l.selectedFilterValues ?? [], a = await Promise.all(s.map(async (u) => (await t.pFrameProvider.getColumnUniqueValues(i, 1, [{
|
|
20
|
+
type: "bySingleColumnV2",
|
|
21
|
+
column: {
|
|
22
|
+
type: "column",
|
|
23
|
+
id: i.name
|
|
24
|
+
},
|
|
25
|
+
predicate: {
|
|
26
|
+
operator: "StringIContains",
|
|
27
|
+
substring: u
|
|
28
|
+
}
|
|
29
|
+
}])).values[0] === u));
|
|
30
|
+
if (s.length > 0 && a.every((u) => u))
|
|
31
|
+
return s;
|
|
32
|
+
}
|
|
33
|
+
return [(await t.pFrameProvider.getColumnUniqueValues(i, 1)).values[0]];
|
|
34
|
+
}
|
|
35
|
+
async function T(t, n, r, i, l) {
|
|
36
|
+
var s;
|
|
37
|
+
const o = (s = r == null ? void 0 : r[n]) == null ? void 0 : s.find((a) => a.selectedSource === i.toCanonicalString());
|
|
38
|
+
if (o && h(o) && o.type === "equals") {
|
|
39
|
+
const a = o.selectedFilterValues ?? [], u = await Promise.all(a.map(async (e) => (await t.pFrameProvider.getAxisUniqueValues(i, [l], 1, [{
|
|
40
|
+
type: "bySingleColumnV2",
|
|
41
|
+
column: {
|
|
42
|
+
type: "axis",
|
|
43
|
+
id: i.toPFrameId()
|
|
44
|
+
},
|
|
45
|
+
predicate: {
|
|
46
|
+
operator: "StringIContains",
|
|
47
|
+
substring: e
|
|
48
|
+
}
|
|
49
|
+
}])).values[0] === e));
|
|
50
|
+
if (a.length > 0 && u.every((e) => e))
|
|
51
|
+
return a;
|
|
52
|
+
}
|
|
53
|
+
return [(await t.pFrameProvider.getAxisUniqueValues(i, [l], 1)).values[0]];
|
|
54
|
+
}
|
|
55
|
+
async function H(t, n, r, i = !0) {
|
|
56
|
+
const l = [], o = n.filter(({ selectedSource: e }) => "kind" in e && e.kind === "PColumn"), s = n.filter(({ selectedSource: e }) => !("kind" in e && e.kind === "PColumn")), a = [];
|
|
57
|
+
for (const { inputName: e, filterType: d, selectedSource: S, selectedFilterValues: f, selectedFilterRange: g } of o) {
|
|
58
|
+
const { name: p, valueType: V, annotations: v, domain: C } = S, c = await t.pFrameProvider.findColumnBy(p, V, A(v), A(C)), q = e === "filters" || e === "tabBy" || e === "highlight";
|
|
59
|
+
if (c) {
|
|
60
|
+
const y = await t.pFrameProvider.getColumnSpecById(c);
|
|
61
|
+
if (!q)
|
|
62
|
+
l.push({ inputName: e, selectedSource: c.toCanonicalString() });
|
|
23
63
|
else {
|
|
24
|
-
const
|
|
25
|
-
|
|
64
|
+
const m = d ?? U(V, y, f, g), R = m === "equals" && typeof f > "u" ? await N(t, e, r, c) : f, F = { min: void 0, max: void 0, ...g };
|
|
65
|
+
l.push({
|
|
26
66
|
inputName: e,
|
|
27
|
-
filterType:
|
|
28
|
-
selectedSource:
|
|
29
|
-
selectedFilterValues:
|
|
30
|
-
selectedFilterRange:
|
|
67
|
+
filterType: m,
|
|
68
|
+
selectedSource: c.toCanonicalString(),
|
|
69
|
+
selectedFilterValues: R,
|
|
70
|
+
selectedFilterRange: F
|
|
31
71
|
});
|
|
32
72
|
}
|
|
33
|
-
|
|
73
|
+
a.push(...(y == null ? void 0 : y.axesSpec.map((m) => ({ spec: m, parentColumn: c }))) ?? []);
|
|
34
74
|
} else
|
|
35
|
-
console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource:
|
|
75
|
+
console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource: S })}`);
|
|
36
76
|
}
|
|
37
|
-
for (const { inputName: e, selectedSource:
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
77
|
+
for (const { inputName: e, selectedSource: d, filterType: S, selectedFilterValues: f, selectedFilterRange: g } of s) {
|
|
78
|
+
const p = w.fromAxisSpec(d), V = p.toCanonicalString(), v = e === "filters" || e === "tabBy" || e === "highlight", C = v ? S ?? U(p.type, { annotations: d == null ? void 0 : d.annotations }) : void 0, c = a.find((m) => w.fromAxisSpec(m.spec).toCanonicalString() === V), q = v && C === "equals" && typeof f > "u" && (c != null && c.parentColumn) ? await T(t, e, r, p, c == null ? void 0 : c.parentColumn) : f, y = { min: void 0, max: void 0, ...g };
|
|
79
|
+
if (i || l.push({
|
|
40
80
|
inputName: e,
|
|
41
|
-
filterType:
|
|
42
|
-
selectedSource:
|
|
43
|
-
selectedFilterValues:
|
|
44
|
-
selectedFilterRange:
|
|
45
|
-
}),
|
|
46
|
-
|
|
81
|
+
filterType: C,
|
|
82
|
+
selectedSource: V,
|
|
83
|
+
selectedFilterValues: q,
|
|
84
|
+
selectedFilterRange: y
|
|
85
|
+
}), c)
|
|
86
|
+
l.push({
|
|
47
87
|
inputName: e,
|
|
48
|
-
filterType:
|
|
49
|
-
selectedSource:
|
|
50
|
-
selectedFilterValues:
|
|
51
|
-
selectedFilterRange:
|
|
88
|
+
filterType: C,
|
|
89
|
+
selectedSource: V,
|
|
90
|
+
selectedFilterValues: q,
|
|
91
|
+
selectedFilterRange: y
|
|
52
92
|
});
|
|
53
93
|
else {
|
|
54
|
-
const { spec:
|
|
55
|
-
if (
|
|
56
|
-
const
|
|
57
|
-
|
|
94
|
+
const { spec: m, parentColumn: R } = a.find((F) => p.name === F.spec.name && p.type === F.spec.type && k(p.domain, F.spec.domain)) ?? {};
|
|
95
|
+
if (m) {
|
|
96
|
+
const F = (e === "filters" || e === "tabBy") && typeof f > "u" ? await T(t, e, r, w.fromAxisSpec(m), R) : f;
|
|
97
|
+
l.push({
|
|
58
98
|
inputName: e,
|
|
59
|
-
filterType:
|
|
60
|
-
selectedSource:
|
|
61
|
-
selectedFilterValues:
|
|
62
|
-
selectedFilterRange:
|
|
99
|
+
filterType: C,
|
|
100
|
+
selectedSource: w.fromAxisSpec(m).toCanonicalString(),
|
|
101
|
+
selectedFilterValues: F,
|
|
102
|
+
selectedFilterRange: y
|
|
63
103
|
});
|
|
64
104
|
}
|
|
65
105
|
}
|
|
66
106
|
}
|
|
67
|
-
return
|
|
68
|
-
selectedSource:
|
|
69
|
-
type:
|
|
70
|
-
selectedFilterValues:
|
|
71
|
-
selectedFilterRange:
|
|
72
|
-
}) : e[
|
|
107
|
+
return l.reduce((e, { inputName: d, selectedSource: S, filterType: f, selectedFilterValues: g, selectedFilterRange: p }) => (e[d] || (e[d] = []), f ? e[d].push({
|
|
108
|
+
selectedSource: S,
|
|
109
|
+
type: f,
|
|
110
|
+
selectedFilterValues: g,
|
|
111
|
+
selectedFilterRange: p
|
|
112
|
+
}) : e[d].push({ selectedSource: S }), e), {});
|
|
73
113
|
}
|
|
74
|
-
function
|
|
75
|
-
return
|
|
114
|
+
function h(t) {
|
|
115
|
+
return typeof t == "object" && t !== null && "type" in t;
|
|
76
116
|
}
|
|
77
|
-
function
|
|
117
|
+
function x(t, n) {
|
|
118
|
+
return h(t) && h(n) ? t.type !== n.type || t.type === "equals" && n.type === "equals" && !P(t.selectedFilterValues, n.selectedFilterValues) || t.selectedFilterRange !== void 0 && n.selectedFilterRange !== void 0 && (t.selectedFilterRange.min !== n.selectedFilterRange.min || t.selectedFilterRange.max !== n.selectedFilterRange.max) ? !1 : t.selectedSource === n.selectedSource : P(t, n);
|
|
119
|
+
}
|
|
120
|
+
function K(t, n, r) {
|
|
78
121
|
if (!n)
|
|
79
|
-
return Object.keys(
|
|
80
|
-
for (const [
|
|
81
|
-
const
|
|
82
|
-
for (const
|
|
83
|
-
|
|
84
|
-
|
|
122
|
+
return Object.keys(r).length > 0;
|
|
123
|
+
for (const [i, l] of Object.entries(r)) {
|
|
124
|
+
const o = n[i], s = l, a = t.components[i].selectorStates;
|
|
125
|
+
for (const u of s)
|
|
126
|
+
if (!a.some((e) => x(e, u)) && !(o != null && o.some((e) => x(e, u))))
|
|
127
|
+
return !0;
|
|
85
128
|
}
|
|
86
129
|
return !1;
|
|
87
130
|
}
|
|
88
|
-
function
|
|
89
|
-
var
|
|
90
|
-
const
|
|
91
|
-
for (const [
|
|
92
|
-
(
|
|
93
|
-
(
|
|
94
|
-
) || (o
|
|
95
|
-
return
|
|
131
|
+
function L(t, n, r) {
|
|
132
|
+
var l;
|
|
133
|
+
const i = I(t.components);
|
|
134
|
+
for (const [o, s] of Object.entries(r))
|
|
135
|
+
(l = n == null ? void 0 : n[o]) != null && l.every(
|
|
136
|
+
(a) => s.some((u) => x(a, u))
|
|
137
|
+
) || (i[o].selectorStates = s);
|
|
138
|
+
return i;
|
|
96
139
|
}
|
|
97
140
|
export {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
141
|
+
L as createUpdatedWithNewDefaultsOptionsState,
|
|
142
|
+
K as isOptionsStateNeedsToBeUpdated,
|
|
143
|
+
H as loadDefaultSources
|
|
101
144
|
};
|
|
102
145
|
//# sourceMappingURL=loadDefaultSources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadDefaultSources.js","sources":["../../src/utils/loadDefaultSources.ts"],"sourcesContent":["import type {\n ChartType,\n ColumnId,\n DemoDataStore,\n InputNamesByChartType,\n InputState,\n SelectorStateFilter,\n SelectorStateSimple,\n} from '@milaboratories/pf-plots';\nimport { AxisId } from '@milaboratories/pf-plots';\nimport type { PredefinedGraphOption } from '../types';\nimport type { AxisSpec, PColumnSpec, ValueType } from '@platforma-sdk/model';\nimport { Annotation, readAnnotation } from '@platforma-sdk/model';\nimport { toRaw } from 'vue';\nimport { copyJSON } from './copyJSON';\nimport { isJsonEqual } from '@milaboratories/helpers';\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\nexport type LoadedDefaultOptionsMap<T extends ChartType> = Record<InputNamesByChartType[T], (SelectorStateFilter | SelectorStateSimple)[]>;\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 spec: PColumnSpec | null,\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'],\n selectedFilterRange?: Partial<SelectorStateFilter['selectedFilterRange']>,\n): SelectorStateFilter['type'] {\n if (spec && readAnnotation(spec, Annotation.IsSubset)) {\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<LoadedDefaultOptionsMap<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, 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, { annotations: selectedSource?.annotations } as PColumnSpec) : 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 const loadedDefaultOptionsGrouped = result.reduce((acc, { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange }) => {\n if (!acc[inputName]) {\n acc[inputName] = [];\n }\n if (filterType) {\n acc[inputName].push({\n selectedSource,\n type: filterType,\n selectedFilterValues,\n selectedFilterRange,\n } as SelectorStateFilter);\n } else {\n acc[inputName].push({ selectedSource });\n }\n return acc;\n }, {} as LoadedDefaultOptionsMap<ChartType>);\n\n return loadedDefaultOptionsGrouped;\n}\n\nfunction selectorStatesAreEqual(a: SelectorStateFilter | SelectorStateSimple, b: SelectorStateFilter | SelectorStateSimple): boolean {\n return isJsonEqual(a, b);\n}\nexport function isOptionsStateNeedsToBeUpdated(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): boolean {\n if (!usedDefaultOptions) {\n return Object.keys(newDefaultOptions).length > 0;\n }\n for (const [inputName, selectedStates] of Object.entries(newDefaultOptions) as [InputNamesByChartType[ChartType], (SelectorStateFilter | SelectorStateSimple)[]][]) {\n const usedDefaults = usedDefaultOptions[inputName];\n const newDefaults = selectedStates;\n const currentOptions = state.components[inputName];\n\n for (const selectorState of newDefaults) {\n // this option is already in current options (set by user or wasn't changed from previous default options)\n if (currentOptions.selectorStates.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n // this option is not changed from previous default options (but was changed by user)\n if (usedDefaults?.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n }\n return true; // we didn't find new option in previous state, so options state requires an update\n }\n return false;\n};\n\nexport function createUpdatedWithNewDefaultsOptionsState(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): InputState['components'] {\n const updatedOptionsState: InputState['components'] = copyJSON(state.components);\n for (const [inputName, selectorStates] of Object.entries(newDefaultOptions)) {\n if (usedDefaultOptions?.[inputName as keyof LoadedDefaultOptionsMap<ChartType>]?.every(\n (s) => selectorStates.some((ss) => selectorStatesAreEqual(s, ss)),\n )) {\n // nothing changed for this input, skip; even if user has changed something, we don't want to reset it\n continue;\n }\n updatedOptionsState[inputName].selectorStates = selectorStates;\n }\n return updatedOptionsState;\n}\n"],"names":["domainIsCompatible","domain","otherDomain","keys","key","getDefaultFilterType","valueType","spec","selectedFilterValues","selectedFilterRange","readAnnotation","Annotation","loadDefaultSources","dataStore","defaultOptions","considerAxisDomains","result","defaultColumnStates","selectedSource","defaultAxisStates","allowedAxisSpecs","inputName","filterType","name","annotations","columnId","toRaw","isFilter","defaultFilterType","defaultSelectedFilterValue","defaultFilterRange","axisId","AxisId","axisSourceStr","columnWithExistingAxis","el","defaultSelectedFilterValues","allowedCompatibleAxisSpec","parentColumn","acc","selectorStatesAreEqual","a","b","isJsonEqual","isOptionsStateNeedsToBeUpdated","state","usedDefaultOptions","newDefaultOptions","selectedStates","usedDefaults","newDefaults","currentOptions","selectorState","s","createUpdatedWithNewDefaultsOptionsState","updatedOptionsState","copyJSON","selectorStates","_a","ss"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loadDefaultSources.js","sources":["../../src/utils/loadDefaultSources.ts"],"sourcesContent":["import type {\n ChartType,\n ColumnId,\n DemoDataStore,\n InputNamesByChartType,\n InputState,\n SelectorStateFilter,\n SelectorStateSimple,\n} from '@milaboratories/pf-plots';\nimport { AxisId } from '@milaboratories/pf-plots';\nimport type { PredefinedGraphOption } from '../types';\nimport type { AxisSpec, PColumnSpec, PObjectId, ValueType } from '@platforma-sdk/model';\nimport { Annotation, readAnnotation } from '@platforma-sdk/model';\nimport { toRaw } from 'vue';\nimport { copyJSON } from './copyJSON';\nimport { isJsonEqual } from '@milaboratories/helpers';\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\nexport type LoadedDefaultOptionsMap<T extends ChartType> = Record<InputNamesByChartType[T], (SelectorStateFilter | SelectorStateSimple)[]>;\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 spec: PColumnSpec | null,\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'],\n selectedFilterRange?: Partial<SelectorStateFilter['selectedFilterRange']>,\n): SelectorStateFilter['type'] {\n if (spec && readAnnotation(spec, Annotation.IsSubset)) {\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}\n\nasync function loadInitialFilterValuesColumn(\n dataStore: DemoDataStore,\n inputName: InputNamesByChartType[ChartType],\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n columnId: ColumnId,\n): Promise<string[]> {\n const sameStateInUsedOptions = usedDefaultOptions?.[inputName]?.find((s) => s.selectedSource === columnId.toCanonicalString());\n\n if (sameStateInUsedOptions && isSelectorStateFilter(sameStateInUsedOptions) && sameStateInUsedOptions.type === 'equals') {\n const previousSelectedFilterValues = sameStateInUsedOptions.selectedFilterValues ?? [];\n const canBeUsedValues = await Promise.all(previousSelectedFilterValues.map(async (v) => {\n const loadedV = await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1, [{\n type: 'bySingleColumnV2',\n column: {\n type: 'column' as const,\n id: columnId.name as PObjectId,\n },\n predicate: {\n operator: 'StringIContains',\n substring: v,\n },\n }]);\n return loadedV.values[0] === v;\n }));\n if (previousSelectedFilterValues.length > 0 && canBeUsedValues.every((v) => v)) {\n return previousSelectedFilterValues;\n }\n }\n return [(await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1)).values[0]];\n}\n\nasync function loadInitialFilterValuesAxis(\n dataStore: DemoDataStore,\n inputName: InputNamesByChartType[ChartType],\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n axisId: AxisId,\n parentColumn: ColumnId,\n): Promise<string[]> {\n const sameStateInUsedOptions = usedDefaultOptions?.[inputName]?.find((s) => s.selectedSource === axisId.toCanonicalString());\n\n if (sameStateInUsedOptions && isSelectorStateFilter(sameStateInUsedOptions) && sameStateInUsedOptions.type === 'equals') {\n const previousSelectedFilterValues = sameStateInUsedOptions.selectedFilterValues ?? [];\n const canBeUsedValues = await Promise.all(previousSelectedFilterValues.map(async (v) => {\n const loadedV = await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [parentColumn], 1, [{\n type: 'bySingleColumnV2',\n column: {\n type: 'axis' as const,\n id: axisId.toPFrameId(),\n },\n predicate: {\n operator: 'StringIContains',\n substring: v,\n },\n }]);\n return loadedV.values[0] === v;\n }));\n if (previousSelectedFilterValues.length > 0 && canBeUsedValues.every((v) => v)) {\n return previousSelectedFilterValues;\n }\n }\n return [(await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [parentColumn as ColumnId], 1)).values[0]];\n}\n\nexport async function loadDefaultSources(\n dataStore: DemoDataStore,\n defaultOptions: PredefinedGraphOption<ChartType>[],\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n considerAxisDomains = true,\n): Promise<LoadedDefaultOptionsMap<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, selectedFilterValues, selectedFilterRange);\n const defaultSelectedFilterValue = defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined'\n ? (await loadInitialFilterValuesColumn(dataStore, inputName, usedDefaultOptions, columnId))\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, { annotations: selectedSource?.annotations } as PColumnSpec) : 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 loadInitialFilterValuesAxis(dataStore, inputName, usedDefaultOptions, axisId, columnWithExistingAxis?.parentColumn as ColumnId))\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 defaultSelectedFilterValues = (inputName === 'filters' || inputName === 'tabBy') && typeof selectedFilterValues === 'undefined'\n ? (await loadInitialFilterValuesAxis(dataStore, inputName, usedDefaultOptions, AxisId.fromAxisSpec(allowedCompatibleAxisSpec), parentColumn as ColumnId))\n : selectedFilterValues;\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: AxisId.fromAxisSpec(allowedCompatibleAxisSpec).toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n }\n }\n\n const loadedDefaultOptionsGrouped = result.reduce((acc, { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange }) => {\n if (!acc[inputName]) {\n acc[inputName] = [];\n }\n if (filterType) {\n acc[inputName].push({\n selectedSource,\n type: filterType,\n selectedFilterValues,\n selectedFilterRange,\n });\n } else {\n acc[inputName].push({ selectedSource });\n }\n return acc;\n }, {} as LoadedDefaultOptionsMap<ChartType>);\n\n return loadedDefaultOptionsGrouped;\n}\n\nfunction isSelectorStateFilter(a: SelectorStateFilter | SelectorStateSimple): a is SelectorStateFilter {\n return typeof a === 'object' && a !== null && 'type' in a;\n}\nfunction selectorStatesAreEqual(\n a: (SelectorStateFilter | SelectorStateSimple),\n b: (SelectorStateFilter | SelectorStateSimple),\n): boolean {\n if (isSelectorStateFilter(a) && isSelectorStateFilter(b)) {\n if (a.type !== b.type) {\n return false;\n }\n if (a.type === 'equals' && b.type === 'equals') {\n const equals = isJsonEqual(a.selectedFilterValues, b.selectedFilterValues);\n if (!equals) {\n return false;\n }\n }\n if (a.selectedFilterRange !== undefined && b.selectedFilterRange !== undefined\n && (a.selectedFilterRange.min !== b.selectedFilterRange.min || a.selectedFilterRange.max !== b.selectedFilterRange.max)\n ) {\n return false;\n }\n return a.selectedSource === b.selectedSource;\n }\n return isJsonEqual(a, b);\n}\nexport function isOptionsStateNeedsToBeUpdated(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): boolean {\n if (!usedDefaultOptions) {\n return Object.keys(newDefaultOptions).length > 0;\n }\n for (const [inputName, selectedStates] of Object.entries(newDefaultOptions) as [InputNamesByChartType[ChartType], (SelectorStateFilter | SelectorStateSimple)[]][]) {\n const usedDefaults = usedDefaultOptions[inputName];\n const newDefaults = selectedStates;\n const currentOptions = state.components[inputName].selectorStates;\n\n for (const selectorState of newDefaults) {\n // this option is already in current options (set by user or wasn't changed from previous default options)\n if (currentOptions.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n // this option is not changed from previous default options (but was changed by user)\n if (usedDefaults?.some((s) => selectorStatesAreEqual(s, selectorState))) {\n continue;\n }\n return true;\n }\n }\n return false;\n};\n\nexport function createUpdatedWithNewDefaultsOptionsState(\n state: InputState,\n usedDefaultOptions: LoadedDefaultOptionsMap<ChartType> | null,\n newDefaultOptions: LoadedDefaultOptionsMap<ChartType>,\n): InputState['components'] {\n const updatedOptionsState: InputState['components'] = copyJSON(state.components);\n for (const [inputName, selectorStates] of Object.entries(newDefaultOptions) as [InputNamesByChartType[ChartType], (SelectorStateFilter | SelectorStateSimple)[]][]) {\n if (usedDefaultOptions?.[inputName as keyof LoadedDefaultOptionsMap<ChartType>]?.every(\n (s) => selectorStates.some((ss) => selectorStatesAreEqual(s, ss)),\n )) {\n // nothing changed for this input, skip; even if user has changed something, we don't want to reset it\n continue;\n }\n updatedOptionsState[inputName].selectorStates = selectorStates;\n }\n return updatedOptionsState;\n}\n"],"names":["domainIsCompatible","domain","otherDomain","keys","key","getDefaultFilterType","valueType","spec","selectedFilterValues","selectedFilterRange","readAnnotation","Annotation","loadInitialFilterValuesColumn","dataStore","inputName","usedDefaultOptions","columnId","sameStateInUsedOptions","_a","isSelectorStateFilter","previousSelectedFilterValues","canBeUsedValues","v","loadInitialFilterValuesAxis","axisId","parentColumn","s","loadDefaultSources","defaultOptions","considerAxisDomains","result","defaultColumnStates","selectedSource","defaultAxisStates","allowedAxisSpecs","filterType","name","annotations","toRaw","isFilter","defaultFilterType","defaultSelectedFilterValue","defaultFilterRange","AxisId","axisSourceStr","columnWithExistingAxis","el","defaultSelectedFilterValues","allowedCompatibleAxisSpec","acc","a","selectorStatesAreEqual","b","isJsonEqual","isOptionsStateNeedsToBeUpdated","state","newDefaultOptions","selectedStates","usedDefaults","newDefaults","currentOptions","selectorState","createUpdatedWithNewDefaultsOptionsState","updatedOptionsState","copyJSON","selectorStates","ss"],"mappings":"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"}
|