@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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.d.ts","sourceRoot":"","sources":["../src/index.vue"],"names":[],"mappings":"AAobA,OAAO,KAAK,EAA0B,gBAAgB,EAAa,MAAM,sBAAsB,CAAC;AAGhG,OAAO,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAmC,eAAe,EAAe,MAAM,SAAS,CAAC;AA2E7F,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;;IA3W5B;;;OAGG;;;;;;;;gBAuWO,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"}
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 w, 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 fe } from "@milaboratories/miplots4";
3
- import { DemoDataStore as ge } from "@milaboratories/pf-plots";
4
- import { watchDebounced as f } from "@vueuse/core";
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 k = p(null);
56
+ const w = p(null);
57
57
  c(() => n.pFrame, (e) => {
58
58
  var o;
59
59
  if (!e.ok || !e.value) {
60
- k.value = null;
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
- k.value = new ge(
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 b = p(n.defaultOptions);
76
+ const k = p(n.defaultOptions);
77
77
  c(() => n.defaultOptions, (e) => {
78
- e && !b.value && (b.value = e);
78
+ k.value = e;
79
79
  }, { deep: !0 });
80
80
  const t = we(
81
81
  i(l.value),
82
- k,
82
+ w,
83
83
  n.chartType,
84
- b,
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
- }), b.value = n.defaultOptions;
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), g = p(null), T = m(
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 (T.value)
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 = g.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" : b.value === null || t.value.loading.defaults || t.value.loading.initialInputGuide ? "loading" : "notReady" : "inconsistent";
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 C, D;
127
+ var T, C;
128
128
  l.value = {
129
129
  ...l.value,
130
130
  selectedPolygons: a
131
131
  };
132
- const o = (D = (C = t.value.chartData.value) == null ? void 0 : C.data) == null ? void 0 : D.axesData;
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, C;
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 D = document.getElementById("chartSvgContainer");
181
- D && (r.value = fe.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(D));
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, g.value = ((v = r.value) == null ? void 0 : v.errorInfo) ?? null;
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
- (C = r.value) == null || C.unmount(), r.value = null, g.value = null;
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" || k.value === null) && ((a = r.value) == null || a.unmount(), r.value = null);
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
- }), f(() => t.value.reactive.optionsState, (e) => {
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 }), f(() => t.value.reactive.usedDefaultOptions, (e) => {
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 }), f(() => t.value.reactive.statisticsSettings, (e) => {
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 }), f(() => t.value.reactive.axesSettings, (e) => {
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 }), f(() => t.value.reactive.layersSettings, (e) => {
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 }), f(() => t.value.reactive.dataBindAes, (e) => {
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 }), f([
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 w(), ve("div", Oe, [
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": g.value,
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 || T.value ? (w(), F(Fe, {
318
+ B.value || b.value ? (D(), F(Fe, {
319
319
  key: 0,
320
- graphStatus: T.value ? "running" : "loading",
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 || T.value) && s(De)(s(t).reactive.currentTab)) ? (w(), F(Se, {
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
- (w(), F(me(Q.value.value), null, {
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 || T.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 = g.value) == null ? void 0 : o.type) === "unknownError" ? (w(), F(Te, {
362
+ ((o = f.value) == null ? void 0 : o.type) === "unknownError" ? (D(), F(Te, {
363
363
  key: 0,
364
- errorInfo: g.value
364
+ errorInfo: f.value
365
365
  }, null, 8, ["errorInfo"])) : S("", !0)
366
366
  ]);
367
367
  };
@@ -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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"}
@@ -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,sBAwJnD;AAED,wBAAgB,QAAQ,kBAEvB"}
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 U, provide as K, reactive as M, inject as k } from "vue";
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 st(e, a, s, c, m, f, b, C, h, t) {
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
- f.value,
71
+ v.value,
72
72
  "primaryGrouping"
73
73
  )
74
74
  ),
75
75
  secondaryGroups: I(
76
76
  () => x(
77
77
  e.optionsState,
78
- f.value,
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: f,
98
+ uniqueValuesData: v,
99
99
  filterSuggestionsData: b,
100
- filterLabelsInfo: C,
101
- readonlyInputs: h,
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, f, b, C, h) {
109
- const t = ut(e, s), v = 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(() => st(
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
- C,
119
- h
118
+ h,
119
+ C
120
120
  ));
121
121
  g(() => a.value, () => {
122
122
  A.value = {}, S.value = {}, T.value = {};
123
123
  });
124
- const O = r(0);
124
+ const w = r(0);
125
125
  g([
126
126
  () => a.value,
127
127
  () => c.value
128
- ], async ([n, l]) => {
129
- if (!l || !n)
128
+ ], async ([n, u]) => {
129
+ if (!u || (u == null ? void 0 : u.length) === 0 || !n)
130
130
  return;
131
- O.value++;
132
- const u = O.value;
133
- o.value.loading.defaults = !0, t.usedDefaultOptions === null && (o.value.loading.initialInputGuide = !1);
134
- const i = await j(n, l);
135
- if (O.value !== u)
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
- R(d, p, i) && (o.value.loading.initialCharts = !0, t.optionsState.components = P(d, p, i), t.usedDefaultOptions = i, o.value.loading.defaults = !1);
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 w = r(0);
144
+ const E = r(0);
141
145
  g([
142
146
  () => t.optionsState,
143
147
  () => a.value,
144
148
  () => m.value
145
- ], async ([n, l, u]) => {
149
+ ], async ([n, u, l]) => {
146
150
  if (c.value === null || a.value === null)
147
151
  return;
148
- w.value++;
149
- const i = w.value;
152
+ E.value++;
153
+ const i = E.value;
150
154
  o.value.loading.inputGuide = !0;
151
- const p = l && u ? Object.values(await j(l, u, !1)).flatMap((D) => D.map((B) => B.selectedSource)) : [], d = l ? await v.calculateOptions(U(l), n, p, f, b) : v.getEmptyInputGuide(n);
152
- i === w.value && (y.value = d, o.value.loading.inputGuide = !1, o.value.loading.initialInputGuide && (o.value.loading.initialInputGuide = !1));
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 E = r(0);
158
+ const B = r(0);
155
159
  if (g(() => y.value, async (n) => {
156
- E.value++;
157
- const l = E.value;
160
+ B.value++;
161
+ const u = B.value;
158
162
  o.value.loading.chartData = !0;
159
- const u = U(a.value), i = await Z(n, t, u, m.value);
160
- if (i && u) {
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
- v,
166
- u,
167
- U(T.value)
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 = u ? await at(t.optionsState.components, n, v, u) : {}, l === E.value && (F.value = i, n.ready && (o.value.loading.initialCharts = !1), o.value.loading.chartData = !1);
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 ([l, u, i, p]) => {
180
- if (i && u) {
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 $(l, u, p), B = await v.createTableData(u, D);
185
- n.value === d && (N.value = B), o.value.loading.dendroTableData = !1;
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
- st as factoryStore,
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 i } from "./loadDefaultSources.js";
3
- async function l(o, r, t) {
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 i(r, t, !1), e = a(o);
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
- l as addFixedOptionsToState
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,GAC5EG,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
+ {"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;AAiC3I,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,qBAAqB,CAAC,SAAS,CAAC,EAAE,EAClD,mBAAmB,UAAO,GACzB,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAqG7C;AAKD,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
+ {"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 V } from "@milaboratories/pf-plots";
2
- import { readAnnotation as q, Annotation as R } from "@platforma-sdk/model";
3
- import { toRaw as x } from "vue";
4
- import { copyJSON as T } from "./copyJSON.js";
5
- import { isJsonEqual as k } from "@milaboratories/helpers";
6
- function I(t, n) {
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 s = Object.keys(t);
10
- return typeof n > "u" ? s.length === 0 : s.every((o) => n[o]);
9
+ const r = Object.keys(t);
10
+ return typeof n > "u" ? r.length === 0 : r.every((i) => n[i]);
11
11
  }
12
- function A(t, n, s, o) {
13
- return n && q(n, R.IsSubset) ? "subset" : o !== void 0 ? "range" : s !== void 0 || t === "Int" || t === "String" ? "equals" : "range";
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 j(t, n, s = !0) {
16
- const o = [], S = n.filter(({ selectedSource: e }) => "kind" in e && e.kind === "PColumn"), c = n.filter(({ selectedSource: e }) => !("kind" in e && e.kind === "PColumn")), f = [];
17
- for (const { inputName: e, filterType: r, selectedSource: p, selectedFilterValues: l, selectedFilterRange: y } of S) {
18
- const { name: a, valueType: F, annotations: C, domain: g } = p, i = await t.pFrameProvider.findColumnBy(a, F, x(C), x(g)), h = e === "filters" || e === "tabBy" || e === "highlight";
19
- if (i) {
20
- const d = await t.pFrameProvider.getColumnSpecById(i);
21
- if (!h)
22
- o.push({ inputName: e, selectedSource: i.toCanonicalString() });
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 u = r ?? A(F, d, l, y), b = u === "equals" && typeof l > "u" ? [(await t.pFrameProvider.getColumnUniqueValues(i, 1)).values[0]] : l, m = { min: void 0, max: void 0, ...y };
25
- o.push({
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: u,
28
- selectedSource: i.toCanonicalString(),
29
- selectedFilterValues: b,
30
- selectedFilterRange: m
67
+ filterType: m,
68
+ selectedSource: c.toCanonicalString(),
69
+ selectedFilterValues: R,
70
+ selectedFilterRange: F
31
71
  });
32
72
  }
33
- f.push(...(d == null ? void 0 : d.axesSpec.map((u) => ({ spec: u, parentColumn: i }))) ?? []);
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: p })}`);
75
+ console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource: S })}`);
36
76
  }
37
- for (const { inputName: e, selectedSource: r, filterType: p, selectedFilterValues: l, selectedFilterRange: y } of c) {
38
- const a = V.fromAxisSpec(r), F = a.toCanonicalString(), C = e === "filters" || e === "tabBy" || e === "highlight", g = C ? p ?? A(a.type, { annotations: r == null ? void 0 : r.annotations }) : void 0, i = f.find((u) => V.fromAxisSpec(u.spec).toCanonicalString() === F), h = C && g === "equals" && typeof l > "u" && (i != null && i.parentColumn) ? [(await t.pFrameProvider.getAxisUniqueValues(a, [i == null ? void 0 : i.parentColumn], 1)).values[0]] : l, d = { min: void 0, max: void 0, ...y };
39
- if (s || o.push({
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: g,
42
- selectedSource: F,
43
- selectedFilterValues: h,
44
- selectedFilterRange: d
45
- }), i)
46
- o.push({
81
+ filterType: C,
82
+ selectedSource: V,
83
+ selectedFilterValues: q,
84
+ selectedFilterRange: y
85
+ }), c)
86
+ l.push({
47
87
  inputName: e,
48
- filterType: g,
49
- selectedSource: F,
50
- selectedFilterValues: h,
51
- selectedFilterRange: d
88
+ filterType: C,
89
+ selectedSource: V,
90
+ selectedFilterValues: q,
91
+ selectedFilterRange: y
52
92
  });
53
93
  else {
54
- const { spec: u, parentColumn: b } = f.find((m) => a.name === m.spec.name && a.type === m.spec.type && I(a.domain, m.spec.domain)) ?? {};
55
- if (u) {
56
- const m = (e === "filters" || e === "tabBy") && typeof l > "u" ? [(await t.pFrameProvider.getAxisUniqueValues(V.fromAxisSpec(u), [b], 1)).values[0]] : l;
57
- o.push({
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: g,
60
- selectedSource: V.fromAxisSpec(u).toCanonicalString(),
61
- selectedFilterValues: m,
62
- selectedFilterRange: d
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 o.reduce((e, { inputName: r, selectedSource: p, filterType: l, selectedFilterValues: y, selectedFilterRange: a }) => (e[r] || (e[r] = []), l ? e[r].push({
68
- selectedSource: p,
69
- type: l,
70
- selectedFilterValues: y,
71
- selectedFilterRange: a
72
- }) : e[r].push({ selectedSource: p }), 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 w(t, n) {
75
- return k(t, n);
114
+ function h(t) {
115
+ return typeof t == "object" && t !== null && "type" in t;
76
116
  }
77
- function J(t, n, s) {
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(s).length > 0;
80
- for (const [o, S] of Object.entries(s)) {
81
- const c = n[o], f = S, v = t.components[o];
82
- for (const e of f)
83
- v.selectorStates.some((r) => w(r, e)) || c != null && c.some((r) => w(r, e));
84
- return !0;
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 G(t, n, s) {
89
- var S;
90
- const o = T(t.components);
91
- for (const [c, f] of Object.entries(s))
92
- (S = n == null ? void 0 : n[c]) != null && S.every(
93
- (v) => f.some((e) => w(v, e))
94
- ) || (o[c].selectorStates = f);
95
- return o;
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
- G as createUpdatedWithNewDefaultsOptionsState,
99
- J as isOptionsStateNeedsToBeUpdated,
100
- j as loadDefaultSources
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/graph-maker",
3
- "version": "1.1.223",
3
+ "version": "1.1.224",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",