@milaboratories/graph-maker 1.1.179 → 1.1.181
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 +148 -132
- 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/package.json +12 -12
|
@@ -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,243 +1,259 @@
|
|
|
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 _, ref as S, watch as g, computed as p, createElementBlock as T, openBlock as i, createElementVNode as y, createVNode as $, createCommentVNode as s, createBlock as c, withKeys as j, resolveDynamicComponent as K, renderSlot as z, unref as r, withCtx as b, createTextVNode as C, normalizeClass as G, toDisplayString as X, withModifiers as P } from "vue";
|
|
2
|
+
import { PlNotificationAlert as J, PlDropdown as Q, PlAutocomplete as Y, PlBtnGhost as E } from "@platforma-sdk/ui-vue";
|
|
3
|
+
import Z from "./DendroTable.vue.js";
|
|
4
|
+
import ee from "./DendroTooltip.vue.js";
|
|
5
|
+
import te from "./LassoControls/index.vue.js";
|
|
6
|
+
import oe from "./Loading.vue.js";
|
|
7
|
+
import ae from "./Zoom/index.vue.js";
|
|
8
|
+
import { MAX_SEARCH_OPTIONS_LIST_LENGTH as M } from "../constantsCommon.js";
|
|
9
|
+
import re from "../icons/EditIcon.vue.js";
|
|
10
|
+
import { useStore as ne } from "../store.js";
|
|
11
|
+
const le = { class: "chart_container" }, ie = { class: "chart_header" }, ue = ["value"], se = { class: "chart_titleLineSlot" }, ce = {
|
|
12
12
|
key: 0,
|
|
13
13
|
class: "chart_tabBy"
|
|
14
|
-
},
|
|
14
|
+
}, de = {
|
|
15
|
+
key: 1,
|
|
16
|
+
class: "chart_errorMessage"
|
|
17
|
+
}, ve = {
|
|
15
18
|
key: 1,
|
|
16
19
|
class: "chart_controls"
|
|
17
|
-
}, be = /* @__PURE__ */
|
|
20
|
+
}, be = /* @__PURE__ */ _({
|
|
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(n, { emit:
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
setup(n, { emit: H }) {
|
|
32
|
+
const V = H, o = ne(), u = n, k = S(u.graphTitle);
|
|
33
|
+
g(() => u.graphTitle, (t) => {
|
|
34
|
+
k.value = t;
|
|
31
35
|
});
|
|
32
|
-
const
|
|
36
|
+
const B = p(() => {
|
|
33
37
|
var t;
|
|
34
|
-
return (t =
|
|
35
|
-
}),
|
|
38
|
+
return (t = o.value.reactive.optionsState.components.tabBy) == null ? void 0 : t.selectorStates[0];
|
|
39
|
+
}), d = p(() => {
|
|
36
40
|
var t;
|
|
37
|
-
return (t =
|
|
38
|
-
}), D =
|
|
41
|
+
return (t = B.value) == null ? void 0 : t.selectedSource;
|
|
42
|
+
}), D = p(() => {
|
|
39
43
|
var t, e;
|
|
40
|
-
return (e = (t =
|
|
41
|
-
}),
|
|
42
|
-
|
|
43
|
-
t !== e && (
|
|
44
|
+
return (e = (t = B.value) == null ? void 0 : t.selectedFilterValues) == null ? void 0 : e[0];
|
|
45
|
+
}), v = S(D.value);
|
|
46
|
+
g(() => d.value, (t, e) => {
|
|
47
|
+
t !== e && (v.value = D.value);
|
|
44
48
|
}, { immediate: !0 });
|
|
45
|
-
async function
|
|
46
|
-
if (!
|
|
49
|
+
async function R(t) {
|
|
50
|
+
if (!o.value.columnsDataStore)
|
|
47
51
|
return Promise.resolve([]);
|
|
48
|
-
const e = await
|
|
52
|
+
const e = await o.value.controller.getUniqueSourceValuesWithLabels(o.value.columnsDataStore, o.value.inputGuide.value, t, M);
|
|
49
53
|
return e.overflow ? null : e.values;
|
|
50
54
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
() =>
|
|
54
|
-
() =>
|
|
55
|
+
const f = S();
|
|
56
|
+
g([
|
|
57
|
+
() => d.value,
|
|
58
|
+
() => o.value.loading.inputGuide
|
|
55
59
|
], async ([t, e]) => {
|
|
56
|
-
t === void 0 || e || !
|
|
57
|
-
}, { immediate: !0 }),
|
|
58
|
-
if (
|
|
60
|
+
t === void 0 || e || !o.value.columnsDataStore || (f.value = await R(t));
|
|
61
|
+
}, { immediate: !0 }), g(() => f.value, async (t) => {
|
|
62
|
+
if (d.value === void 0 || v.value !== void 0 || t === void 0)
|
|
59
63
|
return;
|
|
60
64
|
let e = t;
|
|
61
|
-
if (t === null && (e = await
|
|
62
|
-
const
|
|
63
|
-
|
|
65
|
+
if (t === null && (e = await I(d.value, "")), e != null && e.length) {
|
|
66
|
+
const l = e[0].value;
|
|
67
|
+
v.value = l, w(l);
|
|
64
68
|
}
|
|
65
69
|
}, { immediate: !0 });
|
|
66
|
-
function
|
|
67
|
-
const e =
|
|
68
|
-
e.length && (
|
|
70
|
+
function w(t) {
|
|
71
|
+
const e = o.value.reactive.optionsState.components.tabBy.selectorStates;
|
|
72
|
+
e.length && (o.value.reactive.optionsState.components.tabBy.selectorStates = [{
|
|
69
73
|
...e[0],
|
|
70
74
|
type: "equals",
|
|
71
75
|
selectedFilterValues: [t]
|
|
72
76
|
}]);
|
|
73
77
|
}
|
|
74
|
-
function
|
|
78
|
+
function N(t) {
|
|
75
79
|
const e = t.currentTarget;
|
|
76
|
-
|
|
80
|
+
k.value = e.value, V("graph-title-update", e.value);
|
|
77
81
|
}
|
|
78
|
-
function
|
|
79
|
-
|
|
82
|
+
function O(t) {
|
|
83
|
+
V("dendro-node-select", t);
|
|
80
84
|
}
|
|
81
|
-
async function
|
|
82
|
-
return
|
|
85
|
+
async function I(t, e) {
|
|
86
|
+
return o.value.columnsDataStore ? (await o.value.controller.getUniqueSourceValuesWithLabels(o.value.columnsDataStore, o.value.inputGuide.value, t, M, e || void 0)).values : Promise.resolve([]);
|
|
83
87
|
}
|
|
84
|
-
async function
|
|
85
|
-
return
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
async function F(t, e) {
|
|
89
|
+
return o.value.columnsDataStore ? await o.value.controller.getUniqueSourceValuesWithLabels(
|
|
90
|
+
o.value.columnsDataStore,
|
|
91
|
+
o.value.inputGuide.value,
|
|
88
92
|
t,
|
|
89
93
|
1,
|
|
90
94
|
void 0,
|
|
91
95
|
e
|
|
92
|
-
).then((
|
|
96
|
+
).then((a) => a.values[0]) : Promise.resolve({ value: e, label: " " });
|
|
93
97
|
}
|
|
94
|
-
const
|
|
98
|
+
const x = S(), L = p(() => {
|
|
95
99
|
var e;
|
|
96
|
-
if (
|
|
100
|
+
if (o.value.reactive.chartType !== "discrete")
|
|
97
101
|
return !1;
|
|
98
|
-
const t =
|
|
102
|
+
const t = o.value.reactive.optionsState.components;
|
|
99
103
|
if ((e = t.primaryGrouping) != null && e.selectorStates.length) {
|
|
100
|
-
const
|
|
101
|
-
if ((
|
|
102
|
-
return Object.values(
|
|
103
|
-
var
|
|
104
|
-
return (
|
|
104
|
+
const l = t.primaryGrouping.selectorStates[0].selectedSource, a = o.value.reactive.dataBindAes[l];
|
|
105
|
+
if ((a == null ? void 0 : a.type) === "categorical" && a.hidden)
|
|
106
|
+
return Object.values(a.hidden).length > 0 && a.order.some((m) => {
|
|
107
|
+
var h;
|
|
108
|
+
return (h = a.hidden) == null ? void 0 : h[m];
|
|
105
109
|
});
|
|
106
110
|
}
|
|
107
111
|
return !1;
|
|
108
|
-
}),
|
|
112
|
+
}), U = p(() => {
|
|
109
113
|
var e;
|
|
110
|
-
if (
|
|
114
|
+
if (o.value.reactive.chartType !== "discrete")
|
|
111
115
|
return !1;
|
|
112
|
-
const t =
|
|
116
|
+
const t = o.value.reactive.optionsState.components;
|
|
113
117
|
if ((e = t.secondaryGrouping) != null && e.selectorStates.length) {
|
|
114
|
-
const
|
|
115
|
-
if ((
|
|
116
|
-
return Object.values(
|
|
117
|
-
var
|
|
118
|
-
return (
|
|
118
|
+
const l = t.secondaryGrouping.selectorStates[0].selectedSource, a = o.value.reactive.dataBindAes[l];
|
|
119
|
+
if ((a == null ? void 0 : a.type) === "categorical" && a.hidden)
|
|
120
|
+
return Object.values(a.hidden).length > 0 && a.order.some((m) => {
|
|
121
|
+
var h;
|
|
122
|
+
return (h = a.hidden) == null ? void 0 : h[m];
|
|
119
123
|
});
|
|
120
124
|
}
|
|
121
125
|
return !1;
|
|
122
126
|
});
|
|
123
|
-
function
|
|
124
|
-
|
|
127
|
+
function A() {
|
|
128
|
+
o.value.reactive.tabDefaultState.axes.reorderPrimaryOpen = !0, o.value.reactive.currentTab = "axes";
|
|
125
129
|
}
|
|
126
|
-
function
|
|
127
|
-
|
|
130
|
+
function q() {
|
|
131
|
+
o.value.reactive.tabDefaultState.axes.reorderSecondaryOpen = !0, o.value.reactive.currentTab = "axes";
|
|
128
132
|
}
|
|
133
|
+
const W = p(() => {
|
|
134
|
+
var t, e, l;
|
|
135
|
+
return ((t = u.errorInfo) == null ? void 0 : t.type) === "tooManyFacets" ? `Too many facets (${u.errorInfo.info.count}).
|
|
136
|
+
Maximum count is ${u.errorInfo.info.maxCount}.
|
|
137
|
+
Try to filter the data.` : ((e = u.errorInfo) == null ? void 0 : e.type) === "tooManyPrimaryGroups" ? `Too many primary groups (${u.errorInfo.info.count}).
|
|
138
|
+
Maximum count is ${u.errorInfo.info.maxCount}.
|
|
139
|
+
Try to filter the data.` : ((l = u.errorInfo) == null ? void 0 : l.type) === "tooManySecondaryGroups" ? `Too many secondary groups (${u.errorInfo.info.count}).
|
|
140
|
+
Maximum count is ${u.errorInfo.info.maxCount}.
|
|
141
|
+
Try to filter the data.` : "";
|
|
142
|
+
});
|
|
129
143
|
return (t, e) => {
|
|
130
|
-
var
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
144
|
+
var l;
|
|
145
|
+
return i(), T("div", le, [
|
|
146
|
+
y("div", ie, [
|
|
147
|
+
y("input", {
|
|
134
148
|
class: "chart_title",
|
|
135
|
-
value:
|
|
136
|
-
onChange:
|
|
137
|
-
onKeyup: e[0] || (e[0] =
|
|
138
|
-
var
|
|
139
|
-
(
|
|
149
|
+
value: k.value,
|
|
150
|
+
onChange: N,
|
|
151
|
+
onKeyup: e[0] || (e[0] = j((a) => {
|
|
152
|
+
var m;
|
|
153
|
+
(m = a.target) == null || m.blur();
|
|
140
154
|
}, ["enter"]))
|
|
141
|
-
}, null, 40,
|
|
142
|
-
(
|
|
143
|
-
|
|
144
|
-
|
|
155
|
+
}, null, 40, ue),
|
|
156
|
+
(i(), c(K(re), { class: "chart_titleEdit" })),
|
|
157
|
+
y("div", se, [
|
|
158
|
+
z(t.$slots, "default")
|
|
145
159
|
])
|
|
146
160
|
]),
|
|
147
|
-
|
|
148
|
-
modelValue: r(
|
|
149
|
-
"onUpdate:modelValue": e[1] || (e[1] = (
|
|
161
|
+
$(r(J), {
|
|
162
|
+
modelValue: r(o).reactive.showTooltipHint,
|
|
163
|
+
"onUpdate:modelValue": e[1] || (e[1] = (a) => r(o).reactive.showTooltipHint = a),
|
|
150
164
|
type: "success",
|
|
151
165
|
class: "chart_tooltipHint",
|
|
152
166
|
width: "170px"
|
|
153
167
|
}, {
|
|
154
|
-
default:
|
|
155
|
-
|
|
168
|
+
default: b(() => [...e[10] || (e[10] = [
|
|
169
|
+
C(" Hit enter to pin tooltip ", -1)
|
|
156
170
|
])]),
|
|
157
171
|
_: 1
|
|
158
172
|
}, 8, ["modelValue"]),
|
|
159
|
-
|
|
160
|
-
|
|
173
|
+
d.value ? (i(), T("div", ce, [
|
|
174
|
+
f.value || f.value === void 0 && r(o).loading.inputGuide ? (i(), c(r(Q), {
|
|
161
175
|
key: 0,
|
|
162
|
-
modelValue:
|
|
176
|
+
modelValue: v.value,
|
|
163
177
|
"onUpdate:modelValue": [
|
|
164
|
-
e[2] || (e[2] = (
|
|
165
|
-
e[3] || (e[3] = (
|
|
178
|
+
e[2] || (e[2] = (a) => v.value = a),
|
|
179
|
+
e[3] || (e[3] = (a) => w(a))
|
|
166
180
|
],
|
|
167
181
|
label: "Show for",
|
|
168
|
-
options:
|
|
169
|
-
}, null, 8, ["modelValue", "options"])) : (
|
|
182
|
+
options: f.value
|
|
183
|
+
}, null, 8, ["modelValue", "options"])) : (i(), c(r(Y), {
|
|
170
184
|
key: 1,
|
|
171
|
-
modelValue:
|
|
185
|
+
modelValue: v.value,
|
|
172
186
|
"onUpdate:modelValue": [
|
|
173
|
-
e[4] || (e[4] = (
|
|
174
|
-
e[5] || (e[5] = (
|
|
187
|
+
e[4] || (e[4] = (a) => v.value = a),
|
|
188
|
+
e[5] || (e[5] = (a) => w(a))
|
|
175
189
|
],
|
|
176
190
|
label: "Show for",
|
|
177
|
-
"options-search": (
|
|
178
|
-
"model-search": (
|
|
191
|
+
"options-search": (a) => I(d.value, a),
|
|
192
|
+
"model-search": (a) => F(d.value, a)
|
|
179
193
|
}, null, 8, ["modelValue", "options-search", "model-search"]))
|
|
180
194
|
])) : s("", !0),
|
|
181
|
-
|
|
195
|
+
y("div", {
|
|
182
196
|
ref_key: "chartContainerRef",
|
|
183
|
-
ref:
|
|
184
|
-
class:
|
|
197
|
+
ref: x,
|
|
198
|
+
class: G(["chart_main-content", [{ "chart_main-content__dendro": r(o).reactive.chartType === "dendro" }, "pl-scrollable"]])
|
|
185
199
|
}, [
|
|
186
|
-
|
|
200
|
+
y("div", {
|
|
187
201
|
id: "chartSvgContainer",
|
|
188
|
-
class:
|
|
202
|
+
class: G({
|
|
189
203
|
chart_loading: n.graphStatus === "loading",
|
|
190
204
|
chart_noDataMapping: n.graphStatus === "notReady",
|
|
191
205
|
chart_emptyData: n.graphStatus === "empty",
|
|
192
206
|
chart_inconsistent: n.graphStatus === "inconsistent",
|
|
193
|
-
|
|
194
|
-
|
|
207
|
+
chart_knownError: n.graphStatus === "knownError",
|
|
208
|
+
chart_unknownError: n.graphStatus === "unknownError",
|
|
209
|
+
chart_activeLassoSelection: ((l = r(o).reactive.lassoControlsState) == null ? void 0 : l.mode) === "selection"
|
|
195
210
|
})
|
|
196
211
|
}, [
|
|
197
|
-
n.graphStatus === "loading" ? (
|
|
212
|
+
n.graphStatus === "loading" ? (i(), c(oe, {
|
|
198
213
|
key: 0,
|
|
199
214
|
top: 10
|
|
200
|
-
})) : s("", !0)
|
|
215
|
+
})) : s("", !0),
|
|
216
|
+
n.graphStatus === "knownError" ? (i(), T("div", de, X(W.value), 1)) : s("", !0)
|
|
201
217
|
], 2),
|
|
202
|
-
r(
|
|
218
|
+
r(o).reactive.chartType === "dendro" && n.chartData && r(o).reactive.layersSettings.dendro.showTable ? (i(), c(Z, {
|
|
203
219
|
key: 0,
|
|
204
220
|
chartData: n.chartData,
|
|
205
|
-
onRowSelect:
|
|
221
|
+
onRowSelect: O
|
|
206
222
|
}, null, 8, ["chartData"])) : s("", !0),
|
|
207
|
-
r(
|
|
223
|
+
r(o).reactive.dendroInfoByClick ? (i(), c(ee, {
|
|
208
224
|
key: 1,
|
|
209
|
-
info: r(
|
|
210
|
-
containerRef:
|
|
225
|
+
info: r(o).reactive.dendroInfoByClick,
|
|
226
|
+
containerRef: x.value,
|
|
211
227
|
tooltipBtn: n.dendroTooltipButton,
|
|
212
|
-
onTooltipBtnClick: e[6] || (e[6] = (
|
|
213
|
-
onClose: e[7] || (e[7] = (
|
|
214
|
-
r(
|
|
228
|
+
onTooltipBtnClick: e[6] || (e[6] = (a) => t.$emit("dendro-tooltip-btn-click", a)),
|
|
229
|
+
onClose: e[7] || (e[7] = (a) => {
|
|
230
|
+
r(o).reactive.dendroInfoByClick = null, t.$emit("dendro-node-select", null);
|
|
215
231
|
})
|
|
216
232
|
}, null, 8, ["info", "containerRef", "tooltipBtn"])) : s("", !0)
|
|
217
233
|
], 2),
|
|
218
|
-
n.graphStatus !== "empty" ? (
|
|
219
|
-
|
|
220
|
-
r(
|
|
234
|
+
n.graphStatus !== "empty" ? (i(), T("div", ve, [
|
|
235
|
+
$(ae),
|
|
236
|
+
r(o).reactive.chartType === "scatterplot-umap" ? (i(), c(te, {
|
|
221
237
|
key: 0,
|
|
222
238
|
"chart-ref": n.chartRef
|
|
223
239
|
}, null, 8, ["chart-ref"])) : s("", !0),
|
|
224
|
-
|
|
240
|
+
L.value ? (i(), c(r(E), {
|
|
225
241
|
key: 1,
|
|
226
242
|
icon: "view-hide",
|
|
227
|
-
onClick: e[8] || (e[8] =
|
|
243
|
+
onClick: e[8] || (e[8] = P(() => A(), ["stop"]))
|
|
228
244
|
}, {
|
|
229
|
-
default:
|
|
230
|
-
|
|
245
|
+
default: b(() => [...e[11] || (e[11] = [
|
|
246
|
+
C(" Hidden (primary) ", -1)
|
|
231
247
|
])]),
|
|
232
248
|
_: 1
|
|
233
249
|
})) : s("", !0),
|
|
234
|
-
|
|
250
|
+
U.value ? (i(), c(r(E), {
|
|
235
251
|
key: 2,
|
|
236
252
|
icon: "view-hide",
|
|
237
|
-
onClick: e[9] || (e[9] =
|
|
253
|
+
onClick: e[9] || (e[9] = P(() => q(), ["stop"]))
|
|
238
254
|
}, {
|
|
239
|
-
default:
|
|
240
|
-
|
|
255
|
+
default: b(() => [...e[12] || (e[12] = [
|
|
256
|
+
C(" Hidden (secondary) ", -1)
|
|
241
257
|
])]),
|
|
242
258
|
_: 1
|
|
243
259
|
})) : s("", !0)
|
|
@@ -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]);\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\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\"\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_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\"\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","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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartErrorNotificationAlert.vue2.js","sources":["../../src/components/ChartErrorNotificationAlert.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlBtnPrimary, PlDialogModal, PlNotificationAlert, PlSpacer, PlLogView } from '@platforma-sdk/ui-vue';\nimport { computed, ref } from 'vue';\nimport type { ErrorInfoUnknown } from '@milaboratories/miplots4';\n\nconst props = defineProps<{ errorInfo: ErrorInfoUnknown }>();\n\nconst isModalOpen = ref(false);\nconst isAlertOpen = ref(true);\n\nfunction showErrors() {\n isModalOpen.value = true;\n}\nconst errorMessage = computed(() => props.errorInfo.info?.stack);\n</script>\n<template>\n <div :class=\"$style.alert\">\n <PlDialogModal v-model=\"isModalOpen\" width=\"720px\" style=\"max-height: 100vh\">\n <template #title> Errors </template>\n <div :class=\"$style.alertContent\">\n <div :class=\"$style.alertItem\">\n <div :class=\"$style.alertTitle\">Chart error</div>\n <PlLogView\n :value=\"errorMessage\"\n :valueToCopy=\"errorMessage\"\n download-filename=\"chart-error-log.txt\"\n />\n </div>\n </div>\n </PlDialogModal>\n\n <PlNotificationAlert v-model=\"isAlertOpen\" type=\"error\" closable>\n The chart has errors.\n <template #actions>\n <PlBtnPrimary icon=\"arrow-right\" @click=\"showErrors\">See errors</PlBtnPrimary>\n <PlSpacer />\n </template>\n </PlNotificationAlert>\n </div>\n</template>\n<style module>\n.alert {\n position: fixed;\n bottom: 12px;\n right: 12px;\n width: 256px;\n height: auto;\n z-index: 1;\n}\n.alertContent {\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-height: 100%;\n}\n.alertItem {\n position: relative;\n}\n.alertTitle {\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n margin-bottom: 6px;\n}\n</style>\n"],"names":["props","__props","isModalOpen","ref","isAlertOpen","showErrors","errorMessage","computed","_a","_createElementBlock","_normalizeClass","$style","_createVNode","_unref","PlDialogModal","$event","_cache","_createElementVNode","PlLogView","PlNotificationAlert","PlBtnPrimary","PlSpacer"],"mappings":";;;;;;;;AAKA,UAAMA,IAAQC,GAERC,IAAcC,EAAI,EAAK,GACvBC,IAAcD,EAAI,EAAI;AAE5B,aAASE,IAAa;AACpB,MAAAH,EAAY,QAAQ;AAAA,IACtB;AACA,UAAMI,IAAeC,EAAS,MAAA;;AAAM,cAAAC,IAAAR,EAAM,UAAU,SAAhB,gBAAAQ,EAAsB;AAAA,KAAK;2BAG7DC,EAsBM,OAAA;AAAA,MAtBA,OAAKC,EAAEC,EAAAA,OAAO,KAAK;AAAA,IAAA;MACvBC,EAYgBC,EAAAC,CAAA,GAAA;AAAA,oBAZQZ,EAAA;AAAA,sDAAAA,EAAW,QAAAa;AAAA,QAAE,OAAM;AAAA,QAAQ,OAAA,EAAA,cAAA,QAAA;AAAA,MAAA;QACtC,SAAM,MAAQ,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YAAR,YAAQ,EAAA;AAAA,QAAA;mBACzB,MASM;AAAA,UATNC,EASM,OAAA;AAAA,YATA,OAAKP,EAAEC,EAAAA,OAAO,YAAY;AAAA,UAAA;YAC9BM,EAOM,OAAA;AAAA,cAPA,OAAKP,EAAEC,EAAAA,OAAO,SAAS;AAAA,YAAA;cAC3BM,EAAiD,OAAA;AAAA,gBAA3C,OAAKP,EAAEC,EAAAA,OAAO,UAAU;AAAA,cAAA,GAAE,eAAW,CAAA;AAAA,cAC3CC,EAIEC,EAAAK,CAAA,GAAA;AAAA,gBAHC,OAAOZ,EAAA;AAAA,gBACP,aAAaA,EAAA;AAAA,gBACd,qBAAkB;AAAA,cAAA;;;;;;MAM1BM,EAMsBC,EAAAM,CAAA,GAAA;AAAA,oBANQf,EAAA;AAAA,sDAAAA,EAAW,QAAAW;AAAA,QAAE,MAAK;AAAA,QAAQ,UAAA;AAAA,MAAA;QAE3C,WACT,MAA8E;AAAA,UAA9EH,EAA8EC,EAAAO,CAAA,GAAA;AAAA,YAAhE,MAAK;AAAA,YAAe,SAAOf;AAAA,UAAA;uBAAY,MAAU,CAAA,GAAAW,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAAV,cAAU,EAAA;AAAA,YAAA;;;UAC/DJ,EAAYC,EAAAQ,CAAA,CAAA;AAAA,QAAA;mBAJiD,MAE/D;AAAA,4BAF+D,2BAE/D,EAAA;AAAA,QAAA;;;;;;"}
|