@milaboratories/graph-maker 1.1.180 → 1.1.182
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Chart.vue.d.ts +2 -1
- package/dist/components/Chart.vue.js +158 -125
- package/dist/components/Chart.vue.js.map +1 -1
- package/dist/components/ChartErrorNotificationAlert.vue.d.ts +6 -0
- package/dist/components/ChartErrorNotificationAlert.vue.js +10 -0
- package/dist/components/ChartErrorNotificationAlert.vue.js.map +1 -0
- package/dist/components/ChartErrorNotificationAlert.vue2.js +78 -0
- package/dist/components/ChartErrorNotificationAlert.vue2.js.map +1 -0
- package/dist/components/ChartErrorNotificationAlert.vue3.js +15 -0
- package/dist/components/ChartErrorNotificationAlert.vue3.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.vue.js +208 -199
- package/dist/index.vue.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/createChartSettingsForRender/composeChartSettings.js +35 -35
- package/dist/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChartInterface } from '@milaboratories/miplots4';
|
|
1
|
+
import { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';
|
|
2
2
|
import { GraphStatus } from '../types.ts';
|
|
3
3
|
type __VLS_Props = {
|
|
4
4
|
graphStatus: GraphStatus;
|
|
@@ -6,6 +6,7 @@ type __VLS_Props = {
|
|
|
6
6
|
dendroTooltipButton?: string;
|
|
7
7
|
chartData: Record<string, unknown> | null;
|
|
8
8
|
chartRef: ChartInterface | null;
|
|
9
|
+
errorInfo: ErrorInfo | null;
|
|
9
10
|
};
|
|
10
11
|
declare function __VLS_template(): {
|
|
11
12
|
attrs: Partial<{}>;
|
|
@@ -1,69 +1,82 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { PlNotificationAlert as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import { MAX_SEARCH_OPTIONS_LIST_LENGTH as
|
|
9
|
-
import
|
|
10
|
-
import { useStore as
|
|
11
|
-
const
|
|
1
|
+
import { defineComponent as K, ref as S, watch as g, computed as p, createElementBlock as T, openBlock as s, createElementVNode as y, createVNode as I, createCommentVNode as d, createBlock as v, withKeys as z, resolveDynamicComponent as X, renderSlot as J, unref as n, withCtx as C, createTextVNode as B, normalizeClass as E, toDisplayString as Q, withModifiers as M } from "vue";
|
|
2
|
+
import { PlNotificationAlert as Y, PlDropdown as Z, PlAutocomplete as ee, PlBtnGhost as H } from "@platforma-sdk/ui-vue";
|
|
3
|
+
import te from "./DendroTable.vue.js";
|
|
4
|
+
import oe from "./DendroTooltip.vue.js";
|
|
5
|
+
import ae from "./LassoControls/index.vue.js";
|
|
6
|
+
import re from "./Loading.vue.js";
|
|
7
|
+
import ne from "./Zoom/index.vue.js";
|
|
8
|
+
import { MAX_SEARCH_OPTIONS_LIST_LENGTH as L } from "../constantsCommon.js";
|
|
9
|
+
import le from "../icons/EditIcon.vue.js";
|
|
10
|
+
import { useStore as ie } from "../store.js";
|
|
11
|
+
const se = { class: "chart_container" }, ue = { class: "chart_header" }, ce = ["value"], de = { class: "chart_titleLineSlot" }, ve = {
|
|
12
12
|
key: 0,
|
|
13
13
|
class: "chart_tabBy"
|
|
14
|
-
},
|
|
14
|
+
}, me = {
|
|
15
|
+
key: 1,
|
|
16
|
+
class: "chart_errorMessage"
|
|
17
|
+
}, fe = {
|
|
15
18
|
key: 1,
|
|
16
19
|
class: "chart_controls"
|
|
17
|
-
},
|
|
20
|
+
}, Ce = /* @__PURE__ */ K({
|
|
18
21
|
__name: "Chart",
|
|
19
22
|
props: {
|
|
20
23
|
graphStatus: {},
|
|
21
24
|
graphTitle: {},
|
|
22
25
|
dendroTooltipButton: {},
|
|
23
26
|
chartData: {},
|
|
24
|
-
chartRef: {}
|
|
27
|
+
chartRef: {},
|
|
28
|
+
errorInfo: {}
|
|
25
29
|
},
|
|
26
30
|
emits: ["graph-title-update", "dendro-node-select", "dendro-tooltip-btn-click"],
|
|
27
|
-
setup(
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
setup(l, { emit: R }) {
|
|
32
|
+
const D = R, a = ie(), u = l, w = S(u.graphTitle);
|
|
33
|
+
g(() => u.graphTitle, (t) => {
|
|
34
|
+
w.value = t;
|
|
31
35
|
});
|
|
32
|
-
const
|
|
36
|
+
const x = p(() => {
|
|
33
37
|
var t;
|
|
34
38
|
return (t = a.value.reactive.optionsState.components.tabBy) == null ? void 0 : t.selectorStates[0];
|
|
35
|
-
}),
|
|
39
|
+
}), m = p(() => {
|
|
36
40
|
var t;
|
|
37
|
-
return (t =
|
|
38
|
-
}),
|
|
41
|
+
return (t = x.value) == null ? void 0 : t.selectedSource;
|
|
42
|
+
}), $ = p(() => {
|
|
39
43
|
var t, e;
|
|
40
|
-
return (e = (t =
|
|
41
|
-
}),
|
|
42
|
-
|
|
43
|
-
t
|
|
44
|
+
return (e = (t = x.value) == null ? void 0 : t.selectedFilterValues) == null ? void 0 : e[0];
|
|
45
|
+
}), P = p(() => {
|
|
46
|
+
var t;
|
|
47
|
+
return (t = a.value.reactive.optionsState.components.filters) == null ? void 0 : t.selectorStates;
|
|
48
|
+
}), f = S($.value);
|
|
49
|
+
g(() => m.value, (t, e) => {
|
|
50
|
+
t !== e && (f.value = $.value);
|
|
44
51
|
}, { immediate: !0 });
|
|
45
|
-
async function
|
|
52
|
+
async function N(t) {
|
|
53
|
+
var o;
|
|
46
54
|
if (!a.value.columnsDataStore)
|
|
47
55
|
return Promise.resolve([]);
|
|
48
|
-
const e =
|
|
49
|
-
|
|
56
|
+
const e = P.value.find((i) => i.selectedSource === t);
|
|
57
|
+
if (e && (((o = e.selectedFilterValues) == null ? void 0 : o.length) ?? 0) > 0) {
|
|
58
|
+
const i = e.selectedFilterValues ?? [];
|
|
59
|
+
return Promise.all(i.map((c) => V(t, c)));
|
|
60
|
+
}
|
|
61
|
+
const r = await a.value.controller.getUniqueSourceValuesWithLabels(a.value.columnsDataStore, a.value.inputGuide.value, t, L);
|
|
62
|
+
return r.overflow ? null : r.values;
|
|
50
63
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
() =>
|
|
64
|
+
const h = S();
|
|
65
|
+
g([
|
|
66
|
+
() => m.value,
|
|
54
67
|
() => a.value.loading.inputGuide
|
|
55
68
|
], async ([t, e]) => {
|
|
56
|
-
t === void 0 || e || !a.value.columnsDataStore || (
|
|
57
|
-
}, { immediate: !0 }),
|
|
58
|
-
if (
|
|
69
|
+
t === void 0 || e || !a.value.columnsDataStore || (h.value = await N(t));
|
|
70
|
+
}, { immediate: !0 }), g(() => h.value, async (t) => {
|
|
71
|
+
if (m.value === void 0 || f.value !== void 0 || t === void 0)
|
|
59
72
|
return;
|
|
60
73
|
let e = t;
|
|
61
|
-
if (t === null && (e = await G(
|
|
62
|
-
const
|
|
63
|
-
|
|
74
|
+
if (t === null && (e = await G(m.value, "")), e != null && e.length) {
|
|
75
|
+
const r = e[0].value;
|
|
76
|
+
f.value = r, k(r);
|
|
64
77
|
}
|
|
65
78
|
}, { immediate: !0 });
|
|
66
|
-
function
|
|
79
|
+
function k(t) {
|
|
67
80
|
const e = a.value.reactive.optionsState.components.tabBy.selectorStates;
|
|
68
81
|
e.length && (a.value.reactive.optionsState.components.tabBy.selectorStates = [{
|
|
69
82
|
...e[0],
|
|
@@ -71,17 +84,25 @@ const re = { class: "chart_container" }, ne = { class: "chart_header" }, le = ["
|
|
|
71
84
|
selectedFilterValues: [t]
|
|
72
85
|
}]);
|
|
73
86
|
}
|
|
74
|
-
function
|
|
87
|
+
function O(t) {
|
|
75
88
|
const e = t.currentTarget;
|
|
76
|
-
|
|
89
|
+
w.value = e.value, D("graph-title-update", e.value);
|
|
77
90
|
}
|
|
78
91
|
function U(t) {
|
|
79
|
-
|
|
92
|
+
D("dendro-node-select", t);
|
|
80
93
|
}
|
|
81
94
|
async function G(t, e) {
|
|
82
|
-
|
|
95
|
+
var o;
|
|
96
|
+
if (!a.value.columnsDataStore)
|
|
97
|
+
return Promise.resolve([]);
|
|
98
|
+
const r = P.value.find((i) => i.selectedSource === t);
|
|
99
|
+
if (r && (((o = r.selectedFilterValues) == null ? void 0 : o.length) ?? 0) > 0) {
|
|
100
|
+
const i = r.selectedFilterValues ?? [], c = await Promise.all(i.map((b) => V(t, b)));
|
|
101
|
+
return e ? c.filter((b) => b.label.toLowerCase().includes(e.toLowerCase())) : c;
|
|
102
|
+
}
|
|
103
|
+
return (await a.value.controller.getUniqueSourceValuesWithLabels(a.value.columnsDataStore, a.value.inputGuide.value, t, L, e || void 0)).values;
|
|
83
104
|
}
|
|
84
|
-
async function
|
|
105
|
+
async function V(t, e) {
|
|
85
106
|
return a.value.columnsDataStore ? await a.value.controller.getUniqueSourceValuesWithLabels(
|
|
86
107
|
a.value.columnsDataStore,
|
|
87
108
|
a.value.inputGuide.value,
|
|
@@ -91,31 +112,31 @@ const re = { class: "chart_container" }, ne = { class: "chart_header" }, le = ["
|
|
|
91
112
|
e
|
|
92
113
|
).then((o) => o.values[0]) : Promise.resolve({ value: e, label: " " });
|
|
93
114
|
}
|
|
94
|
-
const
|
|
115
|
+
const F = S(), A = p(() => {
|
|
95
116
|
var e;
|
|
96
117
|
if (a.value.reactive.chartType !== "discrete")
|
|
97
118
|
return !1;
|
|
98
119
|
const t = a.value.reactive.optionsState.components;
|
|
99
120
|
if ((e = t.primaryGrouping) != null && e.selectorStates.length) {
|
|
100
|
-
const
|
|
121
|
+
const r = t.primaryGrouping.selectorStates[0].selectedSource, o = a.value.reactive.dataBindAes[r];
|
|
101
122
|
if ((o == null ? void 0 : o.type) === "categorical" && o.hidden)
|
|
102
|
-
return Object.values(o.hidden).length > 0 && o.order.some((
|
|
103
|
-
var
|
|
104
|
-
return (
|
|
123
|
+
return Object.values(o.hidden).length > 0 && o.order.some((i) => {
|
|
124
|
+
var c;
|
|
125
|
+
return (c = o.hidden) == null ? void 0 : c[i];
|
|
105
126
|
});
|
|
106
127
|
}
|
|
107
128
|
return !1;
|
|
108
|
-
}),
|
|
129
|
+
}), W = p(() => {
|
|
109
130
|
var e;
|
|
110
131
|
if (a.value.reactive.chartType !== "discrete")
|
|
111
132
|
return !1;
|
|
112
133
|
const t = a.value.reactive.optionsState.components;
|
|
113
134
|
if ((e = t.secondaryGrouping) != null && e.selectorStates.length) {
|
|
114
|
-
const
|
|
135
|
+
const r = t.secondaryGrouping.selectorStates[0].selectedSource, o = a.value.reactive.dataBindAes[r];
|
|
115
136
|
if ((o == null ? void 0 : o.type) === "categorical" && o.hidden)
|
|
116
|
-
return Object.values(o.hidden).length > 0 && o.order.some((
|
|
117
|
-
var
|
|
118
|
-
return (
|
|
137
|
+
return Object.values(o.hidden).length > 0 && o.order.some((i) => {
|
|
138
|
+
var c;
|
|
139
|
+
return (c = o.hidden) == null ? void 0 : c[i];
|
|
119
140
|
});
|
|
120
141
|
}
|
|
121
142
|
return !1;
|
|
@@ -123,130 +144,142 @@ const re = { class: "chart_container" }, ne = { class: "chart_header" }, le = ["
|
|
|
123
144
|
function q() {
|
|
124
145
|
a.value.reactive.tabDefaultState.axes.reorderPrimaryOpen = !0, a.value.reactive.currentTab = "axes";
|
|
125
146
|
}
|
|
126
|
-
function
|
|
147
|
+
function _() {
|
|
127
148
|
a.value.reactive.tabDefaultState.axes.reorderSecondaryOpen = !0, a.value.reactive.currentTab = "axes";
|
|
128
149
|
}
|
|
150
|
+
const j = p(() => {
|
|
151
|
+
var t, e, r;
|
|
152
|
+
return ((t = u.errorInfo) == null ? void 0 : t.type) === "tooManyFacets" ? `Too many facets (${u.errorInfo.info.count}).
|
|
153
|
+
Maximum count is ${u.errorInfo.info.maxCount}.
|
|
154
|
+
Try to filter the data.` : ((e = u.errorInfo) == null ? void 0 : e.type) === "tooManyPrimaryGroups" ? `Too many primary groups (${u.errorInfo.info.count}).
|
|
155
|
+
Maximum count is ${u.errorInfo.info.maxCount}.
|
|
156
|
+
Try to filter the data.` : ((r = u.errorInfo) == null ? void 0 : r.type) === "tooManySecondaryGroups" ? `Too many secondary groups (${u.errorInfo.info.count}).
|
|
157
|
+
Maximum count is ${u.errorInfo.info.maxCount}.
|
|
158
|
+
Try to filter the data.` : "";
|
|
159
|
+
});
|
|
129
160
|
return (t, e) => {
|
|
130
|
-
var
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
161
|
+
var r;
|
|
162
|
+
return s(), T("div", se, [
|
|
163
|
+
y("div", ue, [
|
|
164
|
+
y("input", {
|
|
134
165
|
class: "chart_title",
|
|
135
|
-
value:
|
|
136
|
-
onChange:
|
|
137
|
-
onKeyup: e[0] || (e[0] =
|
|
138
|
-
var
|
|
139
|
-
(
|
|
166
|
+
value: w.value,
|
|
167
|
+
onChange: O,
|
|
168
|
+
onKeyup: e[0] || (e[0] = z((o) => {
|
|
169
|
+
var i;
|
|
170
|
+
(i = o.target) == null || i.blur();
|
|
140
171
|
}, ["enter"]))
|
|
141
|
-
}, null, 40,
|
|
142
|
-
(
|
|
143
|
-
|
|
144
|
-
|
|
172
|
+
}, null, 40, ce),
|
|
173
|
+
(s(), v(X(le), { class: "chart_titleEdit" })),
|
|
174
|
+
y("div", de, [
|
|
175
|
+
J(t.$slots, "default")
|
|
145
176
|
])
|
|
146
177
|
]),
|
|
147
|
-
|
|
148
|
-
modelValue:
|
|
149
|
-
"onUpdate:modelValue": e[1] || (e[1] = (o) =>
|
|
178
|
+
I(n(Y), {
|
|
179
|
+
modelValue: n(a).reactive.showTooltipHint,
|
|
180
|
+
"onUpdate:modelValue": e[1] || (e[1] = (o) => n(a).reactive.showTooltipHint = o),
|
|
150
181
|
type: "success",
|
|
151
182
|
class: "chart_tooltipHint",
|
|
152
183
|
width: "170px"
|
|
153
184
|
}, {
|
|
154
|
-
default:
|
|
155
|
-
|
|
185
|
+
default: C(() => [...e[10] || (e[10] = [
|
|
186
|
+
B(" Hit enter to pin tooltip ", -1)
|
|
156
187
|
])]),
|
|
157
188
|
_: 1
|
|
158
189
|
}, 8, ["modelValue"]),
|
|
159
|
-
|
|
160
|
-
|
|
190
|
+
m.value ? (s(), T("div", ve, [
|
|
191
|
+
h.value || h.value === void 0 && n(a).loading.inputGuide ? (s(), v(n(Z), {
|
|
161
192
|
key: 0,
|
|
162
|
-
modelValue:
|
|
193
|
+
modelValue: f.value,
|
|
163
194
|
"onUpdate:modelValue": [
|
|
164
|
-
e[2] || (e[2] = (o) =>
|
|
165
|
-
e[3] || (e[3] = (o) =>
|
|
195
|
+
e[2] || (e[2] = (o) => f.value = o),
|
|
196
|
+
e[3] || (e[3] = (o) => k(o))
|
|
166
197
|
],
|
|
167
198
|
label: "Show for",
|
|
168
|
-
options:
|
|
169
|
-
}, null, 8, ["modelValue", "options"])) : (
|
|
199
|
+
options: h.value
|
|
200
|
+
}, null, 8, ["modelValue", "options"])) : (s(), v(n(ee), {
|
|
170
201
|
key: 1,
|
|
171
|
-
modelValue:
|
|
202
|
+
modelValue: f.value,
|
|
172
203
|
"onUpdate:modelValue": [
|
|
173
|
-
e[4] || (e[4] = (o) =>
|
|
174
|
-
e[5] || (e[5] = (o) =>
|
|
204
|
+
e[4] || (e[4] = (o) => f.value = o),
|
|
205
|
+
e[5] || (e[5] = (o) => k(o))
|
|
175
206
|
],
|
|
176
207
|
label: "Show for",
|
|
177
|
-
"options-search": (o) => G(
|
|
178
|
-
"model-search": (o) =>
|
|
208
|
+
"options-search": (o) => G(m.value, o),
|
|
209
|
+
"model-search": (o) => V(m.value, o)
|
|
179
210
|
}, null, 8, ["modelValue", "options-search", "model-search"]))
|
|
180
|
-
])) :
|
|
181
|
-
|
|
211
|
+
])) : d("", !0),
|
|
212
|
+
y("div", {
|
|
182
213
|
ref_key: "chartContainerRef",
|
|
183
|
-
ref:
|
|
184
|
-
class:
|
|
214
|
+
ref: F,
|
|
215
|
+
class: E(["chart_main-content", [{ "chart_main-content__dendro": n(a).reactive.chartType === "dendro" }, "pl-scrollable"]])
|
|
185
216
|
}, [
|
|
186
|
-
|
|
217
|
+
y("div", {
|
|
187
218
|
id: "chartSvgContainer",
|
|
188
|
-
class:
|
|
189
|
-
chart_loading:
|
|
190
|
-
chart_noDataMapping:
|
|
191
|
-
chart_emptyData:
|
|
192
|
-
chart_inconsistent:
|
|
193
|
-
|
|
194
|
-
|
|
219
|
+
class: E({
|
|
220
|
+
chart_loading: l.graphStatus === "loading",
|
|
221
|
+
chart_noDataMapping: l.graphStatus === "notReady",
|
|
222
|
+
chart_emptyData: l.graphStatus === "empty",
|
|
223
|
+
chart_inconsistent: l.graphStatus === "inconsistent",
|
|
224
|
+
chart_knownError: l.graphStatus === "knownError",
|
|
225
|
+
chart_unknownError: l.graphStatus === "unknownError",
|
|
226
|
+
chart_activeLassoSelection: ((r = n(a).reactive.lassoControlsState) == null ? void 0 : r.mode) === "selection"
|
|
195
227
|
})
|
|
196
228
|
}, [
|
|
197
|
-
|
|
229
|
+
l.graphStatus === "loading" ? (s(), v(re, {
|
|
198
230
|
key: 0,
|
|
199
231
|
top: 10
|
|
200
|
-
})) :
|
|
232
|
+
})) : d("", !0),
|
|
233
|
+
l.graphStatus === "knownError" ? (s(), T("div", me, Q(j.value), 1)) : d("", !0)
|
|
201
234
|
], 2),
|
|
202
|
-
|
|
235
|
+
n(a).reactive.chartType === "dendro" && l.chartData && n(a).reactive.layersSettings.dendro.showTable ? (s(), v(te, {
|
|
203
236
|
key: 0,
|
|
204
|
-
chartData:
|
|
237
|
+
chartData: l.chartData,
|
|
205
238
|
onRowSelect: U
|
|
206
|
-
}, null, 8, ["chartData"])) :
|
|
207
|
-
|
|
239
|
+
}, null, 8, ["chartData"])) : d("", !0),
|
|
240
|
+
n(a).reactive.dendroInfoByClick ? (s(), v(oe, {
|
|
208
241
|
key: 1,
|
|
209
|
-
info:
|
|
210
|
-
containerRef:
|
|
211
|
-
tooltipBtn:
|
|
242
|
+
info: n(a).reactive.dendroInfoByClick,
|
|
243
|
+
containerRef: F.value,
|
|
244
|
+
tooltipBtn: l.dendroTooltipButton,
|
|
212
245
|
onTooltipBtnClick: e[6] || (e[6] = (o) => t.$emit("dendro-tooltip-btn-click", o)),
|
|
213
246
|
onClose: e[7] || (e[7] = (o) => {
|
|
214
|
-
|
|
247
|
+
n(a).reactive.dendroInfoByClick = null, t.$emit("dendro-node-select", null);
|
|
215
248
|
})
|
|
216
|
-
}, null, 8, ["info", "containerRef", "tooltipBtn"])) :
|
|
249
|
+
}, null, 8, ["info", "containerRef", "tooltipBtn"])) : d("", !0)
|
|
217
250
|
], 2),
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
251
|
+
l.graphStatus !== "empty" ? (s(), T("div", fe, [
|
|
252
|
+
I(ne),
|
|
253
|
+
n(a).reactive.chartType === "scatterplot-umap" ? (s(), v(ae, {
|
|
221
254
|
key: 0,
|
|
222
|
-
"chart-ref":
|
|
223
|
-
}, null, 8, ["chart-ref"])) :
|
|
224
|
-
|
|
255
|
+
"chart-ref": l.chartRef
|
|
256
|
+
}, null, 8, ["chart-ref"])) : d("", !0),
|
|
257
|
+
A.value ? (s(), v(n(H), {
|
|
225
258
|
key: 1,
|
|
226
259
|
icon: "view-hide",
|
|
227
|
-
onClick: e[8] || (e[8] =
|
|
260
|
+
onClick: e[8] || (e[8] = M(() => q(), ["stop"]))
|
|
228
261
|
}, {
|
|
229
|
-
default:
|
|
230
|
-
|
|
262
|
+
default: C(() => [...e[11] || (e[11] = [
|
|
263
|
+
B(" Hidden (primary) ", -1)
|
|
231
264
|
])]),
|
|
232
265
|
_: 1
|
|
233
|
-
})) :
|
|
234
|
-
|
|
266
|
+
})) : d("", !0),
|
|
267
|
+
W.value ? (s(), v(n(H), {
|
|
235
268
|
key: 2,
|
|
236
269
|
icon: "view-hide",
|
|
237
|
-
onClick: e[9] || (e[9] =
|
|
270
|
+
onClick: e[9] || (e[9] = M(() => _(), ["stop"]))
|
|
238
271
|
}, {
|
|
239
|
-
default:
|
|
240
|
-
|
|
272
|
+
default: C(() => [...e[12] || (e[12] = [
|
|
273
|
+
B(" Hidden (secondary) ", -1)
|
|
241
274
|
])]),
|
|
242
275
|
_: 1
|
|
243
|
-
})) :
|
|
244
|
-
])) :
|
|
276
|
+
})) : d("", !0)
|
|
277
|
+
])) : d("", !0)
|
|
245
278
|
]);
|
|
246
279
|
};
|
|
247
280
|
}
|
|
248
281
|
});
|
|
249
282
|
export {
|
|
250
|
-
|
|
283
|
+
Ce as default
|
|
251
284
|
};
|
|
252
285
|
//# sourceMappingURL=Chart.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.vue.js","sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Loading from '../components/Loading.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus } from '../types.ts';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch(() => tabBySource.value, (value, prevValue) => { // tabBy column changed, needs to update selected value\n if (value !== prevValue) {\n tabByLocalValue.value = tabByFilterValue.value;\n }\n}, { immediate: true });\n\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore) {\n return Promise.resolve([]);\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH);\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\nasync function searchFilterOptions(sourceId: string, searchStr: string): Promise<ListOption[]> {\n if (!store.value.columnsDataStore) {\n return Promise.resolve([]);\n }\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchStr || undefined)).values;\n}\n\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string): Promise<ListOption> {\n if (!store.value.columnsDataStore) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const value = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore, store.value.inputGuide.value,\n sourceId, 1, undefined, selectedValue).then((v) => v.values[0]);\n return value;\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\" :value=\"title\" @change=\"onTitleChange\"\n @keyup.enter=\"(e) => {(e.target as HTMLInputElement)?.blur()}\"\n />\n <component :is=\"EditIcon\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot/>\n </div>\n </div>\n <PlNotificationAlert\n v-model=\"store.reactive.showTooltipHint\"\n type=\"success\"\n class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\"\n label=\"Show for\"\n :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else\n v-model=\"tabByLocalValue\"\n label=\"Show for\"\n :options-search=\"(str) => searchFilterOptions(tabBySource as string, str)\"\n :model-search=\"(v) => searchSelectedFilterValueOptions(tabBySource as string, v as string)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{'chart_main-content__dendro': store.reactive.chartType === 'dendro'}, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\"\n :class=\"{\n 'chart_loading': graphStatus === 'loading',\n 'chart_noDataMapping': graphStatus === 'notReady',\n 'chart_emptyData': graphStatus === 'empty',\n 'chart_inconsistent': graphStatus === 'inconsistent',\n 'chart_error': graphStatus === 'error',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n >\n <Loading v-if=\"graphStatus === 'loading'\" :top=\"10\"/>\n </div>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\"\n @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\"\n :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\"\n :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id:string) => $emit('dendro-tooltip-btn-click', id)\"\n @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus !== 'empty'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\"/>\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"names":["emit","__emit","store","useStore","props","__props","title","ref","watch","graphTitle","tabByState","computed","_a","tabBySource","tabByFilterValue","_b","tabByLocalValue","value","prevValue","loadOptions","sourceId","response","MAX_SEARCH_OPTIONS_LIST_LENGTH","preloadedOptions","v","loading","opts","availableOptions","searchFilterOptions","nextFilterValue","onFilterValueUpdate","prevSelectorStates","onTitleChange","e","target","onTableRowSelect","id","searchStr","searchSelectedFilterValueOptions","selectedValue","chartContainerRef","hasPrimaryHidden","optionsState","columnName","dataBindAes","hasSecondaryHidden","openAxesSettingsPrimary","openAxesSettingsSecondary","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createBlock","_resolveDynamicComponent","EditIcon","_hoisted_4","_renderSlot","_ctx","_createVNode","_unref","PlNotificationAlert","$event","_cache","_hoisted_5","PlDropdown","PlAutocomplete","str","_normalizeClass","Loading","DendroTable","DendroTooltip","$emit","_hoisted_6","Zoom","LassoControls","PlBtnGhost"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Chart.vue.js","sources":["../../src/components/Chart.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ChartInterface, ErrorInfo } from '@milaboratories/miplots4';\nimport type { SelectorStateFilter } from '@milaboratories/pf-plots';\nimport type { ListOption } from '@platforma-sdk/ui-vue';\nimport { PlAutocomplete, PlBtnGhost, PlDropdown, PlNotificationAlert } from '@platforma-sdk/ui-vue';\nimport { computed, ref, watch } from 'vue';\nimport DendroTable from '../components/DendroTable.vue';\nimport DendroTooltip from '../components/DendroTooltip.vue';\nimport LassoControls from '../components/LassoControls/index.vue';\nimport Loading from '../components/Loading.vue';\nimport Zoom from '../components/Zoom/index.vue';\nimport { MAX_SEARCH_OPTIONS_LIST_LENGTH } from '../constantsCommon.ts';\nimport EditIcon from '../icons/EditIcon.vue';\nimport { useStore } from '../store.ts';\nimport type { GraphStatus } from '../types.ts';\n\nconst emit = defineEmits(['graph-title-update', 'dendro-node-select', 'dendro-tooltip-btn-click']);\n\nconst store = useStore();\n\nconst props = defineProps<{\n graphStatus: GraphStatus;\n graphTitle: string;\n dendroTooltipButton?: string;\n chartData: Record<string, unknown> | null;\n chartRef: ChartInterface | null;\n errorInfo: ErrorInfo | null;\n}>();\n\nconst title = ref(props.graphTitle);\n// title can be updated from graph-maker settings\nwatch(() => props.graphTitle, (graphTitle) => {\n title.value = graphTitle;\n});\n\nconst tabByState = computed(() => store.value.reactive.optionsState.components.tabBy?.selectorStates[0] as SelectorStateFilter | undefined);\nconst tabBySource = computed(() => tabByState.value?.selectedSource);\nconst tabByFilterValue = computed(() => tabByState.value?.selectedFilterValues?.[0]);\nconst filtersStates = computed(() => store.value.reactive.optionsState.components.filters?.selectorStates as SelectorStateFilter[]);\n\nconst tabByLocalValue = ref(tabByFilterValue.value);\nwatch(() => tabBySource.value, (value, prevValue) => { // tabBy column changed, needs to update selected value\n if (value !== prevValue) {\n tabByLocalValue.value = tabByFilterValue.value;\n }\n}, { immediate: true });\n\nasync function loadOptions(sourceId: string) {\n if (!store.value.columnsDataStore) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n return Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n }\n const response = await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH);\n return response.overflow ? null : response.values;\n}\nconst preloadedOptions = ref<ListOption[] | null | undefined>();\nwatch([\n () => tabBySource.value,\n () => store.value.loading.inputGuide,\n], async ([v, loading]) => {\n if (v === undefined || loading || !store.value.columnsDataStore) {\n return undefined;\n }\n preloadedOptions.value = await loadOptions(v);\n}, { immediate: true });\n\nwatch(() => preloadedOptions.value, async (opts) => {\n if (\n tabBySource.value === undefined // no tabBy selected\n || tabByLocalValue.value !== undefined // tabBy selected and has selected value\n || opts === undefined // options not loaded yet\n ) {\n return;\n }\n let availableOptions = opts;\n if (opts === null) { // options loaded but too many unique values\n availableOptions = await searchFilterOptions(tabBySource.value, '');\n }\n if (availableOptions?.length) {\n const nextFilterValue = availableOptions[0].value as string;\n tabByLocalValue.value = nextFilterValue;\n onFilterValueUpdate(nextFilterValue);\n }\n}, { immediate: true });\n\nfunction onFilterValueUpdate(value: string) {\n const prevSelectorStates = store.value.reactive.optionsState.components.tabBy.selectorStates;\n if (prevSelectorStates.length) {\n store.value.reactive.optionsState.components.tabBy.selectorStates = [{\n ...prevSelectorStates[0],\n type: 'equals',\n selectedFilterValues: [value],\n }];\n }\n}\n\nfunction onTitleChange(e: Event) {\n const target = e.currentTarget as HTMLInputElement;\n title.value = target.value;\n emit('graph-title-update', target.value);\n}\n\nfunction onTableRowSelect(id: number) {\n emit('dendro-node-select', id);\n}\n\nasync function searchFilterOptions(sourceId: string, searchStr: string) {\n if (!store.value.columnsDataStore) {\n return Promise.resolve([]);\n }\n // if the same source is selected in filters, return only selected values;\n const filtersStateWithTheSameSource = filtersStates.value.find((state) => state.selectedSource === sourceId) as SelectorStateFilter | undefined;\n if (filtersStateWithTheSameSource && (filtersStateWithTheSameSource.selectedFilterValues?.length ?? 0) > 0) {\n const selectedValues = filtersStateWithTheSameSource.selectedFilterValues ?? [];\n const results = await Promise.all(selectedValues.map((selectedValue) => searchSelectedFilterValueOptions(sourceId, selectedValue)));\n return searchStr ? results.filter((v) => v.label.toLowerCase().includes(searchStr.toLowerCase())) : results;\n }\n return (await store.value.controller.getUniqueSourceValuesWithLabels(store.value.columnsDataStore, store.value.inputGuide.value, sourceId, MAX_SEARCH_OPTIONS_LIST_LENGTH, searchStr || undefined)).values;\n}\n\nasync function searchSelectedFilterValueOptions(sourceId: string, selectedValue: string) {\n if (!store.value.columnsDataStore) {\n return Promise.resolve({ value: selectedValue, label: ' ' }); // don't show non-human-readable value\n }\n const value = await store.value.controller.getUniqueSourceValuesWithLabels(\n store.value.columnsDataStore, store.value.inputGuide.value,\n sourceId, 1, undefined, selectedValue).then((v) => v.values[0]);\n return value;\n}\n\nconst chartContainerRef = ref();\n\nconst hasPrimaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.primaryGrouping?.selectorStates.length) {\n const columnName = optionsState.primaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nconst hasSecondaryHidden = computed(() => {\n if (store.value.reactive.chartType !== 'discrete') {\n return false;\n }\n const optionsState = store.value.reactive.optionsState.components;\n if (optionsState.secondaryGrouping?.selectorStates.length) {\n const columnName = optionsState.secondaryGrouping.selectorStates[0].selectedSource;\n const dataBindAes = store.value.reactive.dataBindAes[columnName];\n if (dataBindAes?.type === 'categorical' && dataBindAes.hidden) {\n return Object.values(dataBindAes.hidden).length > 0 && dataBindAes.order.some((v) => dataBindAes.hidden?.[v]);\n }\n }\n return false;\n});\nfunction openAxesSettingsPrimary() {\n store.value.reactive.tabDefaultState['axes'].reorderPrimaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\nfunction openAxesSettingsSecondary() {\n store.value.reactive.tabDefaultState['axes'].reorderSecondaryOpen = true;\n store.value.reactive.currentTab = 'axes';\n}\n\nconst errorMessage = computed(() => {\n if (props.errorInfo?.type === 'tooManyFacets') {\n return `Too many facets (${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManyPrimaryGroups') {\n return `Too many primary groups\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n if (props.errorInfo?.type === 'tooManySecondaryGroups') {\n return `Too many secondary groups\\u00A0(${props.errorInfo.info.count}).\\nMaximum count is\\u00A0${props.errorInfo.info.maxCount}.\\nTry to\\u00A0filter the\\u00A0data.`;\n }\n return '';\n});\n\n</script>\n\n<template>\n <div class=\"chart_container\">\n <div class=\"chart_header\">\n <input\n class=\"chart_title\" :value=\"title\" @change=\"onTitleChange\"\n @keyup.enter=\"(e) => { (e.target as HTMLInputElement)?.blur() }\"\n />\n <component :is=\"EditIcon\" class=\"chart_titleEdit\" />\n <div class=\"chart_titleLineSlot\">\n <slot />\n </div>\n </div>\n <PlNotificationAlert\n v-model=\"store.reactive.showTooltipHint\" type=\"success\" class=\"chart_tooltipHint\"\n width=\"170px\"\n >\n Hit enter to pin tooltip\n </PlNotificationAlert>\n <div v-if=\"tabBySource\" class=\"chart_tabBy\">\n <PlDropdown\n v-if=\"preloadedOptions || (preloadedOptions === undefined && store.loading.inputGuide)\"\n v-model=\"tabByLocalValue\" label=\"Show for\" :options=\"preloadedOptions\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n <PlAutocomplete\n v-else v-model=\"tabByLocalValue\" label=\"Show for\"\n :options-search=\"(str) => searchFilterOptions(tabBySource as string, str)\"\n :model-search=\"(v) => searchSelectedFilterValueOptions(tabBySource as string, v as string)\"\n @update:modelValue=\"(v) => onFilterValueUpdate(v as string)\"\n />\n </div>\n <div\n ref=\"chartContainerRef\" class=\"chart_main-content\"\n :class=\"[{ 'chart_main-content__dendro': store.reactive.chartType === 'dendro' }, 'pl-scrollable']\"\n >\n <div\n id=\"chartSvgContainer\" :class=\"{\n 'chart_loading': graphStatus === 'loading',\n 'chart_noDataMapping': graphStatus === 'notReady',\n 'chart_emptyData': graphStatus === 'empty',\n 'chart_inconsistent': graphStatus === 'inconsistent',\n 'chart_knownError': graphStatus === 'knownError',\n 'chart_unknownError': graphStatus === 'unknownError',\n 'chart_activeLassoSelection': store.reactive.lassoControlsState?.mode === 'selection'\n }\"\n >\n <Loading v-if=\"graphStatus === 'loading'\" :top=\"10\" />\n <div v-if=\"graphStatus === 'knownError'\" class=\"chart_errorMessage\">\n {{ errorMessage }}\n </div>\n </div>\n <DendroTable\n v-if=\"store.reactive.chartType === 'dendro' && chartData && store.reactive.layersSettings.dendro.showTable\"\n :chartData=\"chartData\" @row-select=\"onTableRowSelect\"\n />\n <DendroTooltip\n v-if=\"store.reactive.dendroInfoByClick\" :info=\"store.reactive.dendroInfoByClick\"\n :containerRef=\"chartContainerRef\" :tooltipBtn=\"dendroTooltipButton\"\n @tooltip-btn-click=\"(id: string) => $emit('dendro-tooltip-btn-click', id)\" @close=\"\n store.reactive.dendroInfoByClick = null;\n $emit('dendro-node-select', null);\n \"\n />\n </div>\n <div v-if=\"graphStatus !== 'empty'\" class=\"chart_controls\">\n <Zoom />\n <LassoControls v-if=\"store.reactive.chartType === 'scatterplot-umap'\" :chart-ref=\"chartRef\" />\n <PlBtnGhost v-if=\"hasPrimaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsPrimary()\">\n Hidden (primary)\n </PlBtnGhost>\n <PlBtnGhost v-if=\"hasSecondaryHidden\" icon=\"view-hide\" @click.stop=\"() => openAxesSettingsSecondary()\">\n Hidden (secondary)\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"names":["emit","__emit","store","useStore","props","__props","title","ref","watch","graphTitle","tabByState","computed","_a","tabBySource","tabByFilterValue","_b","filtersStates","tabByLocalValue","value","prevValue","loadOptions","sourceId","filtersStateWithTheSameSource","state","selectedValues","selectedValue","searchSelectedFilterValueOptions","response","MAX_SEARCH_OPTIONS_LIST_LENGTH","preloadedOptions","v","loading","opts","availableOptions","searchFilterOptions","nextFilterValue","onFilterValueUpdate","prevSelectorStates","onTitleChange","e","target","onTableRowSelect","id","searchStr","results","chartContainerRef","hasPrimaryHidden","optionsState","columnName","dataBindAes","hasSecondaryHidden","openAxesSettingsPrimary","openAxesSettingsSecondary","errorMessage","_c","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createBlock","_resolveDynamicComponent","EditIcon","_hoisted_4","_renderSlot","_ctx","_createVNode","_unref","PlNotificationAlert","$event","_cache","_hoisted_5","PlDropdown","PlAutocomplete","str","_normalizeClass","Loading","_hoisted_6","_toDisplayString","DendroTable","DendroTooltip","$emit","_hoisted_7","Zoom","LassoControls","PlBtnGhost"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ErrorInfoUnknown } from '@milaboratories/miplots4';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
errorInfo: ErrorInfoUnknown;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import o from "./ChartErrorNotificationAlert.vue2.js";
|
|
2
|
+
import t from "./ChartErrorNotificationAlert.vue3.js";
|
|
3
|
+
import r from "../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const s = {
|
|
5
|
+
$style: t
|
|
6
|
+
}, i = /* @__PURE__ */ r(o, [["__cssModules", s]]);
|
|
7
|
+
export {
|
|
8
|
+
i as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=ChartErrorNotificationAlert.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartErrorNotificationAlert.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { defineComponent as y, ref as p, computed as C, createElementBlock as c, openBlock as g, normalizeClass as a, createVNode as l, unref as o, withCtx as t, createElementVNode as i, createTextVNode as u } from "vue";
|
|
2
|
+
import { PlDialogModal as w, PlLogView as P, PlNotificationAlert as E, PlBtnPrimary as N, PlSpacer as T } from "@platforma-sdk/ui-vue";
|
|
3
|
+
const $ = /* @__PURE__ */ y({
|
|
4
|
+
__name: "ChartErrorNotificationAlert",
|
|
5
|
+
props: {
|
|
6
|
+
errorInfo: {}
|
|
7
|
+
},
|
|
8
|
+
setup(f) {
|
|
9
|
+
const v = f, s = p(!1), d = p(!0);
|
|
10
|
+
function V() {
|
|
11
|
+
s.value = !0;
|
|
12
|
+
}
|
|
13
|
+
const m = C(() => {
|
|
14
|
+
var r;
|
|
15
|
+
return (r = v.errorInfo.info) == null ? void 0 : r.stack;
|
|
16
|
+
});
|
|
17
|
+
return (r, e) => (g(), c("div", {
|
|
18
|
+
class: a(r.$style.alert)
|
|
19
|
+
}, [
|
|
20
|
+
l(o(w), {
|
|
21
|
+
modelValue: s.value,
|
|
22
|
+
"onUpdate:modelValue": e[0] || (e[0] = (n) => s.value = n),
|
|
23
|
+
width: "720px",
|
|
24
|
+
style: { "max-height": "100vh" }
|
|
25
|
+
}, {
|
|
26
|
+
title: t(() => [...e[2] || (e[2] = [
|
|
27
|
+
u(" Errors ", -1)
|
|
28
|
+
])]),
|
|
29
|
+
default: t(() => [
|
|
30
|
+
i("div", {
|
|
31
|
+
class: a(r.$style.alertContent)
|
|
32
|
+
}, [
|
|
33
|
+
i("div", {
|
|
34
|
+
class: a(r.$style.alertItem)
|
|
35
|
+
}, [
|
|
36
|
+
i("div", {
|
|
37
|
+
class: a(r.$style.alertTitle)
|
|
38
|
+
}, "Chart error", 2),
|
|
39
|
+
l(o(P), {
|
|
40
|
+
value: m.value,
|
|
41
|
+
valueToCopy: m.value,
|
|
42
|
+
"download-filename": "chart-error-log.txt"
|
|
43
|
+
}, null, 8, ["value", "valueToCopy"])
|
|
44
|
+
], 2)
|
|
45
|
+
], 2)
|
|
46
|
+
]),
|
|
47
|
+
_: 1
|
|
48
|
+
}, 8, ["modelValue"]),
|
|
49
|
+
l(o(E), {
|
|
50
|
+
modelValue: d.value,
|
|
51
|
+
"onUpdate:modelValue": e[1] || (e[1] = (n) => d.value = n),
|
|
52
|
+
type: "error",
|
|
53
|
+
closable: ""
|
|
54
|
+
}, {
|
|
55
|
+
actions: t(() => [
|
|
56
|
+
l(o(N), {
|
|
57
|
+
icon: "arrow-right",
|
|
58
|
+
onClick: V
|
|
59
|
+
}, {
|
|
60
|
+
default: t(() => [...e[3] || (e[3] = [
|
|
61
|
+
u("See errors", -1)
|
|
62
|
+
])]),
|
|
63
|
+
_: 1
|
|
64
|
+
}),
|
|
65
|
+
l(o(T))
|
|
66
|
+
]),
|
|
67
|
+
default: t(() => [
|
|
68
|
+
e[4] || (e[4] = u(" The chart has errors. ", -1))
|
|
69
|
+
]),
|
|
70
|
+
_: 1
|
|
71
|
+
}, 8, ["modelValue"])
|
|
72
|
+
], 2));
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
export {
|
|
76
|
+
$ as default
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=ChartErrorNotificationAlert.vue2.js.map
|