@antscorp/antsomi-genai 1.0.6 → 1.0.7
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/Component-7EZmYnN8.mjs +261 -0
- package/dist/Component-7EZmYnN8.mjs.map +1 -0
- package/dist/Component-BW_rCSr4.mjs +142 -0
- package/dist/Component-BW_rCSr4.mjs.map +1 -0
- package/dist/Component-BazCM_HQ.mjs +313 -0
- package/dist/Component-BazCM_HQ.mjs.map +1 -0
- package/dist/Component-BbKfqO_w.mjs +86 -0
- package/dist/Component-BbKfqO_w.mjs.map +1 -0
- package/dist/{Component-DKrH_QkH.mjs → Component-C27lY-IH.mjs} +2 -1
- package/dist/Component-C27lY-IH.mjs.map +1 -0
- package/dist/Component-CxKtGeEY.mjs +100 -0
- package/dist/Component-CxKtGeEY.mjs.map +1 -0
- package/dist/Component-DR98dVu0.mjs +141 -0
- package/dist/Component-DR98dVu0.mjs.map +1 -0
- package/dist/Component-JSY63syJ.mjs +241 -0
- package/dist/Component-JSY63syJ.mjs.map +1 -0
- package/dist/Component-kVKgBeH8.mjs +83 -0
- package/dist/Component-kVKgBeH8.mjs.map +1 -0
- package/dist/{Component-CTfDbD_d.mjs → Component-y4AnEpp8.mjs} +3342 -3345
- package/dist/Component-y4AnEpp8.mjs.map +1 -0
- package/dist/index--IQFOK8F.mjs +6 -0
- package/dist/index--IQFOK8F.mjs.map +1 -0
- package/dist/{index-sCbsA1DR.mjs → index-Bxh4AxQk.mjs} +3 -2
- package/dist/index-Bxh4AxQk.mjs.map +1 -0
- package/dist/{index-B5HGiE1g.mjs → index-C19D3Esg.mjs} +3561 -3509
- package/dist/index-C19D3Esg.mjs.map +1 -0
- package/dist/{index-CQEJnKKK.mjs → index-CJSY_hg5.mjs} +2 -1
- package/dist/index-CJSY_hg5.mjs.map +1 -0
- package/dist/{index-JaNOziH3.mjs → index-CQ-Xd6-Q.mjs} +3 -2
- package/dist/index-CQ-Xd6-Q.mjs.map +1 -0
- package/dist/{index-Dh9EYLoH.mjs → index-CTRdxsjR.mjs} +22 -21
- package/dist/index-CTRdxsjR.mjs.map +1 -0
- package/dist/index-Cv-G3hqI.mjs +6 -0
- package/dist/index-Cv-G3hqI.mjs.map +1 -0
- package/dist/index-CzUSEK5y.mjs +249 -0
- package/dist/index-CzUSEK5y.mjs.map +1 -0
- package/dist/{index-DiwQ5kuX.mjs → index-DaouEtYW.mjs} +2 -1
- package/dist/index-DaouEtYW.mjs.map +1 -0
- package/dist/{index-BunB7Zfa.mjs → index-DyF-ciJy.mjs} +3 -2
- package/dist/index-DyF-ciJy.mjs.map +1 -0
- package/dist/{index-Cmy0W3pf.mjs → index-Efp6ricm.mjs} +1210 -1269
- package/dist/index-Efp6ricm.mjs.map +1 -0
- package/dist/{index-j8mMwpTN.mjs → index-ErWxfrxC.mjs} +188 -183
- package/dist/index-ErWxfrxC.mjs.map +1 -0
- package/dist/index-T6M4_4_u.mjs +6 -0
- package/dist/index-T6M4_4_u.mjs.map +1 -0
- package/dist/index.es.js +2 -1
- package/dist/index.es.js.map +1 -0
- package/dist/toNumber-CHl49cGq.mjs +1 -0
- package/dist/toNumber-CHl49cGq.mjs.map +1 -0
- package/dist/{useGetSchema-B4FeKOfN.mjs → useGetSchema-IqknBZGf.mjs} +2 -1
- package/dist/useGetSchema-IqknBZGf.mjs.map +1 -0
- package/package.json +2 -2
- package/dist/Component-BKr0w4Us.mjs +0 -86
- package/dist/Component-BgBLJsOt.mjs +0 -316
- package/dist/Component-DCaEyotc.mjs +0 -264
- package/dist/Component-DOVG-vCq.mjs +0 -144
- package/dist/Component-DXg6OcXi.mjs +0 -244
- package/dist/Component-Deoa-f1C.mjs +0 -89
- package/dist/Component-JWAUzkP5.mjs +0 -103
- package/dist/Component-UboAHscO.mjs +0 -145
- package/dist/index-DHqQn4M-.mjs +0 -5
- package/dist/index-DUG__POS.mjs +0 -5
- package/dist/index-RnRjfUZ7.mjs +0 -5
- package/dist/index-uqO3Q0gN.mjs +0 -210
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { Report as X } from "@antscorp/antsomi-charts";
|
|
2
|
+
import { Spin as B } from "@antscorp/antsomi-ui";
|
|
3
|
+
import { useState as K, useMemo as q } from "react";
|
|
4
|
+
import { U as y, aa as Q, r as G, a8 as J } from "./index-C19D3Esg.mjs";
|
|
5
|
+
import { u as Z } from "./useGetSchema-IqknBZGf.mjs";
|
|
6
|
+
import { e as ee } from "./index-ErWxfrxC.mjs";
|
|
7
|
+
function te(c, a) {
|
|
8
|
+
const o = /* @__PURE__ */ Object.create(null);
|
|
9
|
+
for (let t = 0; t < c.length; t++) {
|
|
10
|
+
const l = c[t], s = a(l);
|
|
11
|
+
o[s] == null && (o[s] = []), o[s].push(l);
|
|
12
|
+
}
|
|
13
|
+
return o;
|
|
14
|
+
}
|
|
15
|
+
function W(c) {
|
|
16
|
+
return Array.isArray(c);
|
|
17
|
+
}
|
|
18
|
+
const ae = (c) => {
|
|
19
|
+
let a = "";
|
|
20
|
+
const o = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
21
|
+
for (let t = 0; t < c; t++)
|
|
22
|
+
a += o.charAt(Math.floor(Math.random() * o.length));
|
|
23
|
+
return a;
|
|
24
|
+
}, z = (c, a, o, t, l, s, n = "", m = "ROW", T = "") => {
|
|
25
|
+
if (a.length <= 0)
|
|
26
|
+
return [];
|
|
27
|
+
const h = y.helpers.getInfoFieldToQuery({ field: a[t] }), v = `${h.name}-${h.semantics.semanticType}-${h.aggregationType}`.toLowerCase(), N = [...c], g = a[t].id || "", u = a[t].name, H = a[t].dataType, O = a[t].aliasSemantics || a[t].semantics;
|
|
28
|
+
let w = [];
|
|
29
|
+
const S = l[t], p = S.name || o[0].name, V = s === "descending" ? "desc" : "asc", b = te(N, (i) => i[v]?.toString());
|
|
30
|
+
for (const i of Object.keys(b)) {
|
|
31
|
+
const e = {}, d = ae(6);
|
|
32
|
+
for (const I of b[i]) {
|
|
33
|
+
e.dataType = H, e.semantics = O, e[g] = I[v]?.toString(), e[u] = I[v]?.toString();
|
|
34
|
+
for (const [$, C] of Object.entries(I))
|
|
35
|
+
if ($ === "aggregations" && W(C))
|
|
36
|
+
if (e[$] !== void 0 && W(e[$]))
|
|
37
|
+
for (let R = 0, L = C.length; R < +L; R++) {
|
|
38
|
+
const F = C[R];
|
|
39
|
+
e[$][R].value = +e[$][R].value + +F.value;
|
|
40
|
+
}
|
|
41
|
+
else
|
|
42
|
+
e[$] = C.map((R) => ({ ...R }));
|
|
43
|
+
}
|
|
44
|
+
const r = n + e[g], f = T + d;
|
|
45
|
+
if (t < a.length - 1 && b[i]) {
|
|
46
|
+
const I = t + 1;
|
|
47
|
+
e.child = z(
|
|
48
|
+
b[i],
|
|
49
|
+
a,
|
|
50
|
+
o,
|
|
51
|
+
I,
|
|
52
|
+
l,
|
|
53
|
+
s,
|
|
54
|
+
`${r}>`,
|
|
55
|
+
m,
|
|
56
|
+
`${f}>`
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
e.cellId = m === "ROW" ? `${r};;` : `;${r};`, e._cellId = m === "ROW" ? `${f};;` : `;${f};`, e._id = d, e.id = e[g], e.value = e[u] || Q(e[u] || Number.NaN) ? y.helpers.formatValue({
|
|
60
|
+
value: e[u]?.toString(),
|
|
61
|
+
field: a[t]
|
|
62
|
+
}).toString() : "--", e.rawValue = e[u] || Q(e[u] || Number.NaN) ? e[u] : "", w.push(e);
|
|
63
|
+
}
|
|
64
|
+
return w = G(
|
|
65
|
+
w,
|
|
66
|
+
[
|
|
67
|
+
(i) => {
|
|
68
|
+
if (i.aggregations?.some((e) => e.name === p)) {
|
|
69
|
+
let e = 0;
|
|
70
|
+
for (const d of i.aggregations)
|
|
71
|
+
d.name === p && (e += +d.value);
|
|
72
|
+
return e;
|
|
73
|
+
}
|
|
74
|
+
if (i[p] !== void 0 && !Number.isNaN(i[p]))
|
|
75
|
+
return +i[p];
|
|
76
|
+
if (typeof i[p] == "string") {
|
|
77
|
+
const e = i[p].split("—");
|
|
78
|
+
switch (i.dataType) {
|
|
79
|
+
case "HYPERLINK": {
|
|
80
|
+
if (e.length === 3) {
|
|
81
|
+
const r = e[1];
|
|
82
|
+
return y.helpers.removeAccent(r).toLowerCase();
|
|
83
|
+
}
|
|
84
|
+
const d = e[1];
|
|
85
|
+
return y.helpers.removeAccent(d).toLowerCase();
|
|
86
|
+
}
|
|
87
|
+
case "IMAGE": {
|
|
88
|
+
const d = e[0];
|
|
89
|
+
return y.helpers.removeAccent(d).toLowerCase();
|
|
90
|
+
}
|
|
91
|
+
default:
|
|
92
|
+
return y.helpers.removeAccent(i[p]).toLowerCase();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return i[p];
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
[V]
|
|
99
|
+
), S.numberDisplay && +S.numberDisplay > 0 && +S.numberDisplay < w.length && (w = w.splice(0, +S.numberDisplay)), w;
|
|
100
|
+
}, ne = (c) => {
|
|
101
|
+
const { rows: a = [] } = c, o = [];
|
|
102
|
+
for (const t of a) {
|
|
103
|
+
const l = [], s = {};
|
|
104
|
+
for (const n of t)
|
|
105
|
+
if (n.semantics.conceptType === "METRIC")
|
|
106
|
+
l.push({
|
|
107
|
+
name: n.name,
|
|
108
|
+
value: n.value,
|
|
109
|
+
type: n.aggregationType
|
|
110
|
+
});
|
|
111
|
+
else {
|
|
112
|
+
const m = `${n.name}-${n.semantics.semanticType}-${n.aggregationType}`.toLowerCase();
|
|
113
|
+
s[m] = n.value, s[n.name] = n.value;
|
|
114
|
+
}
|
|
115
|
+
o.push({
|
|
116
|
+
aggregations: l,
|
|
117
|
+
...s
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return { rows: o };
|
|
121
|
+
}, oe = (c) => {
|
|
122
|
+
const { data: a, settings: o } = c, { rows: t } = ne(a), {
|
|
123
|
+
columnDimension: l,
|
|
124
|
+
rowDimension: s,
|
|
125
|
+
sortRow: n,
|
|
126
|
+
sortColumn: m,
|
|
127
|
+
azRow: T,
|
|
128
|
+
azColumn: h,
|
|
129
|
+
metric: v
|
|
130
|
+
} = o;
|
|
131
|
+
let N = "";
|
|
132
|
+
const g = o.renderMetric ? y.helpers.safeParseListField(o.renderMetric) : v, u = n[0].semantics.conceptType, H = m[0].semantics.conceptType;
|
|
133
|
+
let O = n, w = m;
|
|
134
|
+
if ((u === "METRIC" || H === "METRIC") && (u === "METRIC" && g.at(0)?.name && g[0].name !== n[0].name && (O = g), H === "METRIC" && g.at(0)?.name && g[0].name !== m[0].name && (w = g)), g.length > 0 && g[0]) {
|
|
135
|
+
const { label: r } = g[0];
|
|
136
|
+
N = r;
|
|
137
|
+
}
|
|
138
|
+
const S = [], p = [], V = [];
|
|
139
|
+
let b = [], i = [];
|
|
140
|
+
l.length > 0 && l.forEach((r) => {
|
|
141
|
+
const f = y.helpers.getInfoFieldToQuery({ field: r }), I = `${f.name}-${f.semantics.semanticType}-${f.aggregationType}`.toLowerCase();
|
|
142
|
+
p.push(r.label), V.push(I);
|
|
143
|
+
}), s.length > 0 && s.forEach((r) => {
|
|
144
|
+
const f = y.helpers.getInfoFieldToQuery({ field: r }), I = `${f.name}-${f.semantics.semanticType}-${f.aggregationType}`.toLowerCase();
|
|
145
|
+
p.push(r.label), V.push(I);
|
|
146
|
+
});
|
|
147
|
+
const e = z(
|
|
148
|
+
t,
|
|
149
|
+
s,
|
|
150
|
+
g,
|
|
151
|
+
0,
|
|
152
|
+
O,
|
|
153
|
+
T,
|
|
154
|
+
"",
|
|
155
|
+
"ROW"
|
|
156
|
+
), d = z(
|
|
157
|
+
t,
|
|
158
|
+
l,
|
|
159
|
+
g,
|
|
160
|
+
0,
|
|
161
|
+
w,
|
|
162
|
+
h,
|
|
163
|
+
"",
|
|
164
|
+
"COLUMN"
|
|
165
|
+
);
|
|
166
|
+
return b = e.map((r) => r.value?.toString() || ""), i = d.map((r) => r.value?.toString() || ""), e.forEach((r, f) => {
|
|
167
|
+
const I = typeof r.cellId == "string" ? r.cellId.split(";") : "", $ = typeof I[0] == "string" ? I[0].split(">") : [];
|
|
168
|
+
d.length > 0 && d.forEach((C, R) => {
|
|
169
|
+
for (const L of g) {
|
|
170
|
+
let F = !1, E = 0;
|
|
171
|
+
const j = L.aliasAggregation || L.aggregation || "", P = typeof C.cellId == "string" ? C.cellId.split(";") : "", Y = typeof P[1] == "string" ? P[1].split(">") : [];
|
|
172
|
+
t.some((k) => {
|
|
173
|
+
const _ = s.every((M, D) => {
|
|
174
|
+
const A = y.helpers.getInfoFieldToQuery({ field: M }), x = `${A.name}-${A.semantics.semanticType}-${A.aggregationType}`.toLowerCase();
|
|
175
|
+
return `${k[x]}` === $[D];
|
|
176
|
+
}), U = l.every((M, D) => {
|
|
177
|
+
const A = y.helpers.getInfoFieldToQuery({ field: M }), x = `${A.name}-${A.semantics.semanticType}-${A.aggregationType}`.toLowerCase();
|
|
178
|
+
return `${k[x]}` === Y[D];
|
|
179
|
+
});
|
|
180
|
+
if (_ && U) {
|
|
181
|
+
if (Array.isArray(k.aggregations) && k.aggregations.length > 0) {
|
|
182
|
+
let M = 0;
|
|
183
|
+
for (const D of k.aggregations)
|
|
184
|
+
D.name === L.name && D.type === j && (M += +D.value);
|
|
185
|
+
return F = !0, E += M, E;
|
|
186
|
+
}
|
|
187
|
+
return F = !0, E += +k[L.name], E;
|
|
188
|
+
}
|
|
189
|
+
}), F && S.push({
|
|
190
|
+
x: R,
|
|
191
|
+
y: f,
|
|
192
|
+
value: E,
|
|
193
|
+
valueLabel: y.helpers.formatValue({ value: E, field: L }).toString(),
|
|
194
|
+
dataY: r.value?.toString() || "",
|
|
195
|
+
dataX: C.value?.toString() || "",
|
|
196
|
+
rawDataX: C.rawValue?.toString() || "",
|
|
197
|
+
rawDataY: r.rawValue?.toString() || "",
|
|
198
|
+
isActive: !1
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}), { metricLabel: N, labelDimension: p, keyDimension: V, arrColumn: i, arrRow: b, data: S };
|
|
203
|
+
}, re = (c) => {
|
|
204
|
+
const { nodeViewProps: a } = c, {
|
|
205
|
+
extension: { options: o = {} },
|
|
206
|
+
node: t
|
|
207
|
+
} = a, l = `${o.messageId}`, s = parseInt(o.dataSourceId, 2) || 0, [n, m] = K(), { data: T, dataSourceSchema: h, isLoading: v, error: N } = Z({
|
|
208
|
+
id: l,
|
|
209
|
+
attrs: n,
|
|
210
|
+
dataSourceId: s,
|
|
211
|
+
enabled: !!n
|
|
212
|
+
});
|
|
213
|
+
return J(() => {
|
|
214
|
+
m(ee.parse(t.attrs));
|
|
215
|
+
}, [t.attrs]), { ...q(() => {
|
|
216
|
+
if (!(T && n && h))
|
|
217
|
+
return null;
|
|
218
|
+
const u = y.nodeView.report.attrsToCompSetting({
|
|
219
|
+
dataSourceSchema: h,
|
|
220
|
+
attrs: n
|
|
221
|
+
});
|
|
222
|
+
return {
|
|
223
|
+
...oe({
|
|
224
|
+
data: T,
|
|
225
|
+
settings: u
|
|
226
|
+
}),
|
|
227
|
+
settings: u
|
|
228
|
+
};
|
|
229
|
+
}, [T, n, h]), isLoading: v, error: N };
|
|
230
|
+
}, ue = (c) => {
|
|
231
|
+
const { chartWrapperSize: a, renderDropdownAction: o } = c, {
|
|
232
|
+
data: t,
|
|
233
|
+
arrColumn: l,
|
|
234
|
+
arrRow: s,
|
|
235
|
+
labelDimension: n,
|
|
236
|
+
metricLabel: m,
|
|
237
|
+
keyDimension: T,
|
|
238
|
+
settings: h,
|
|
239
|
+
isLoading: v
|
|
240
|
+
} = re({
|
|
241
|
+
nodeViewProps: c
|
|
242
|
+
});
|
|
243
|
+
return v || !t || !h ? /* @__PURE__ */ React.createElement(B, { indicatorSize: 20 }) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
244
|
+
X.Heatmap,
|
|
245
|
+
{
|
|
246
|
+
data: t,
|
|
247
|
+
dimension: h.dimension,
|
|
248
|
+
arrXAxis: l,
|
|
249
|
+
arrYAxis: s,
|
|
250
|
+
keyDimension: T,
|
|
251
|
+
labelDimension: n,
|
|
252
|
+
metricLabel: m,
|
|
253
|
+
width: a?.width,
|
|
254
|
+
height: a?.height
|
|
255
|
+
}
|
|
256
|
+
), o(t));
|
|
257
|
+
};
|
|
258
|
+
export {
|
|
259
|
+
ue as HeatmapNodeView
|
|
260
|
+
};
|
|
261
|
+
//# sourceMappingURL=Component-7EZmYnN8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component-7EZmYnN8.mjs","sources":["../node_modules/es-toolkit/dist/array/groupBy.mjs","../node_modules/es-toolkit/dist/compat/predicate/isArray.mjs","../src/components/ConversationMessage/extensions/NodeViews/Heatmap/utils.ts","../src/components/ConversationMessage/extensions/NodeViews/Heatmap/hooks/useHeatmapNodeView.ts","../src/components/ConversationMessage/extensions/NodeViews/Heatmap/Component.tsx"],"sourcesContent":["function groupBy(arr, getKeyFromItem) {\n const result = Object.create(null);\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n const key = getKeyFromItem(item);\n if (result[key] == null) {\n result[key] = [];\n }\n result[key].push(item);\n }\n return result;\n}\n\nexport { groupBy };\n","function isArray(value) {\n return Array.isArray(value);\n}\n\nexport { isArray };\n","import type { ReportHeatmapData } from '@antscorp/antsomi-charts';\nimport { groupBy, orderBy } from 'es-toolkit';\nimport { isArray, isNumber } from 'es-toolkit/compat';\nimport type { ApiHeatmaptData, Field, HeatmapSettings } from '@/types';\nimport { Utils } from '@/utils';\n\nconst random = (number: number) => {\n\tlet text = '';\n\tconst possible = 'abcdefghijklmnopqrstuvwxyz0123456789';\n\n\tfor (let i = 0; i < number; i++) {\n\t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t}\n\n\treturn text;\n};\n\ntype Row = {\n\taggregations: {\n\t\tname: string;\n\t\ttype: string;\n\t\tvalue: string;\n\t}[];\n\t[key: string]: Record<string, string> | Record<string, string>[];\n};\n\nconst handleHeaderLabel = (\n\trowsHeader: Row[],\n\tdimension: Field[],\n\tmetric: Field[],\n\ti: number,\n\tdataSort: (Field & { numberDisplay?: number })[],\n\taz: string,\n\theaderId = '',\n\ttype = 'ROW',\n\t_headerId = '',\n) => {\n\tif (dimension.length <= 0) {\n\t\treturn [];\n\t}\n\n\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: dimension[i] });\n\tconst processKey =\n\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\tconst rowsHeaderClone = [...rowsHeader];\n\tconst dimensionId = dimension[i].id || '';\n\tconst dimensionName = dimension[i].name;\n\tconst dataType = dimension[i].dataType;\n\tconst semantics = dimension[i].aliasSemantics || dimension[i].semantics;\n\n\ttype Header = {\n\t\tdataType?: string;\n\n\t\tsemantics?: {\n\t\t\tconceptType: string;\n\t\t\tsemanticType: string;\n\t\t};\n\n\t\taggregations?: Record<string, string | number>[];\n\n\t\t[key: string]:\n\t\t\t| string\n\t\t\t| Record<string, string>\n\t\t\t| Record<string, string | number>[]\n\t\t\t| Header[]\n\t\t\t| undefined;\n\t};\n\n\tlet arrayHeader: Header[] = [];\n\tconst itemSort = dataSort[i];\n\n\tconst sortId = itemSort.name || metric[0].name;\n\tconst sortType = az === 'descending' ? 'desc' : 'asc';\n\n\tconst groupRow = groupBy(rowsHeaderClone, (row) => row[processKey]?.toString());\n\n\tfor (const groupId of Object.keys(groupRow)) {\n\t\tconst row: Header = {};\n\n\t\tconst _id = random(6);\n\n\t\tfor (const item of groupRow[groupId]) {\n\t\t\trow.dataType = dataType;\n\t\t\trow.semantics = semantics;\n\t\t\trow[dimensionId] = item[processKey]?.toString();\n\t\t\trow[dimensionName] = item[processKey]?.toString();\n\n\t\t\tfor (const [key, value] of Object.entries(item)) {\n\t\t\t\tif (key === 'aggregations' && isArray(value)) {\n\t\t\t\t\tif (row[key] !== undefined && isArray(row[key])) {\n\t\t\t\t\t\tfor (let i = 0, length = value.length; i < +length; i++) {\n\t\t\t\t\t\t\tconst aggItem = value[i];\n\n\t\t\t\t\t\t\trow[key][i].value = +row[key][i].value + +aggItem.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow[key] = value.map((a) => ({ ...a }));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst cellId = headerId + row[dimensionId];\n\t\tconst _cellId = _headerId + _id;\n\n\t\tif (i < dimension.length - 1 && groupRow[groupId]) {\n\t\t\tconst level = i + 1;\n\n\t\t\trow.child = handleHeaderLabel(\n\t\t\t\tgroupRow[groupId],\n\t\t\t\tdimension,\n\t\t\t\tmetric,\n\t\t\t\tlevel,\n\t\t\t\tdataSort,\n\t\t\t\taz,\n\t\t\t\t`${cellId}>`,\n\t\t\t\ttype,\n\t\t\t\t`${_cellId}>`,\n\t\t\t);\n\t\t}\n\n\t\trow.cellId = type === 'ROW' ? `${cellId};;` : `;${cellId};`;\n\t\trow._cellId = type === 'ROW' ? `${_cellId};;` : `;${_cellId};`;\n\t\trow._id = _id;\n\t\trow.id = row[dimensionId];\n\t\trow.value =\n\t\t\trow[dimensionName] || isNumber(row[dimensionName] || Number.NaN)\n\t\t\t\t? Utils.helpers\n\t\t\t\t\t\t.formatValue({\n\t\t\t\t\t\t\tvalue: row[dimensionName]?.toString(),\n\t\t\t\t\t\t\tfield: dimension[i],\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.toString()\n\t\t\t\t: '--';\n\n\t\trow.rawValue =\n\t\t\trow[dimensionName] || isNumber(row[dimensionName] || Number.NaN) ? row[dimensionName] : '';\n\n\t\tarrayHeader.push(row);\n\t}\n\n\tarrayHeader = orderBy<Header>(\n\t\tarrayHeader,\n\t\t[\n\t\t\t(row) => {\n\t\t\t\tif (row.aggregations?.some((item) => item.name === sortId)) {\n\t\t\t\t\tlet valueItem = 0;\n\n\t\t\t\t\tfor (const aggItem of row.aggregations) {\n\t\t\t\t\t\tif (aggItem.name === sortId) {\n\t\t\t\t\t\t\tvalueItem += +aggItem.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn valueItem;\n\t\t\t\t}\n\n\t\t\t\tif (row[sortId] !== undefined && !Number.isNaN(row[sortId])) {\n\t\t\t\t\treturn +row[sortId];\n\t\t\t\t}\n\n\t\t\t\tif (typeof row[sortId] === 'string') {\n\t\t\t\t\tconst arrValue = row[sortId].split('—');\n\n\t\t\t\t\tswitch (row.dataType) {\n\t\t\t\t\t\tcase 'HYPERLINK': {\n\t\t\t\t\t\t\tif (arrValue.length === 3) {\n\t\t\t\t\t\t\t\tconst imgPath = arrValue[1];\n\n\t\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(imgPath).toLowerCase();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst labelLink = arrValue[1];\n\n\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(labelLink).toLowerCase();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 'IMAGE': {\n\t\t\t\t\t\t\tconst imgPath = arrValue[0];\n\n\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(imgPath).toLowerCase();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(row[sortId]).toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn row[sortId];\n\t\t\t},\n\t\t],\n\t\t[sortType],\n\t);\n\n\tif (\n\t\titemSort.numberDisplay &&\n\t\t+itemSort.numberDisplay > 0 &&\n\t\t+itemSort.numberDisplay < arrayHeader.length\n\t) {\n\t\tarrayHeader = arrayHeader.splice(0, +itemSort.numberDisplay);\n\t}\n\n\treturn arrayHeader;\n};\n\nconst formatDataResponse = (data: ApiHeatmaptData) => {\n\tconst { rows = [] } = data;\n\n\tconst newRows: Row[] = [];\n\n\tfor (const fields of rows) {\n\t\tconst arrAggregation: { name: string; value: string; type: string }[] = [];\n\t\tconst dimension: Record<string, string> = {};\n\n\t\tfor (const row of fields) {\n\t\t\tif (row.semantics.conceptType === 'METRIC') {\n\t\t\t\tarrAggregation.push({\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tvalue: row.value,\n\t\t\t\t\ttype: row.aggregationType,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst key =\n\t\t\t\t\t`${row.name}-${row.semantics.semanticType}-${row.aggregationType}`.toLowerCase();\n\n\t\t\t\tdimension[key] = row.value;\n\t\t\t\tdimension[row.name] = row.value;\n\t\t\t}\n\t\t}\n\n\t\tnewRows.push({\n\t\t\taggregations: arrAggregation,\n\t\t\t...dimension,\n\t\t});\n\t}\n\n\treturn { rows: newRows };\n};\n\nexport const serializeReportPerfData = (params: {\n\tsettings: HeatmapSettings;\n\tdata: ApiHeatmaptData;\n}) => {\n\tconst { data, settings } = params;\n\n\tconst { rows } = formatDataResponse(data);\n\n\tconst {\n\t\tcolumnDimension,\n\t\trowDimension,\n\t\tsortRow,\n\t\tsortColumn,\n\t\tazRow,\n\t\tazColumn,\n\t\tmetric: metrics,\n\t} = settings;\n\n\tlet metricLabel = '';\n\n\tconst renderMetric = settings.renderMetric\n\t\t? Utils.helpers.safeParseListField(settings.renderMetric)\n\t\t: metrics;\n\n\tconst conceptTypeSortRow = sortRow[0].semantics.conceptType;\n\tconst conceptTypeSortColumn = sortColumn[0].semantics.conceptType;\n\n\tlet updateSortRow = sortRow;\n\tlet updateSortColumn = sortColumn;\n\n\tif (conceptTypeSortRow === 'METRIC' || conceptTypeSortColumn === 'METRIC') {\n\t\tif (conceptTypeSortRow === 'METRIC') {\n\t\t\tif (renderMetric.at(0)?.name && renderMetric[0].name !== sortRow[0].name) {\n\t\t\t\tupdateSortRow = renderMetric;\n\t\t\t}\n\t\t}\n\n\t\tif (conceptTypeSortColumn === 'METRIC') {\n\t\t\tif (renderMetric.at(0)?.name && renderMetric[0].name !== sortColumn[0].name) {\n\t\t\t\tupdateSortColumn = renderMetric;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (renderMetric.length > 0 && renderMetric[0]) {\n\t\tconst { label } = renderMetric[0];\n\n\t\tmetricLabel = label;\n\n\t\t// setMetricLabel(label);\n\t}\n\n\tconst arrData: ReportHeatmapData = [];\n\tconst labelDimension: string[] = [];\n\tconst keyDimension: string[] = [];\n\n\tlet arrRow: string[] = [];\n\tlet arrColumn: string[] = [];\n\n\tif (columnDimension.length > 0) {\n\t\tcolumnDimension.forEach((value) => {\n\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: value });\n\t\t\tconst key =\n\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\tlabelDimension.push(value.label);\n\t\t\tkeyDimension.push(key);\n\t\t});\n\t}\n\n\tif (rowDimension.length > 0) {\n\t\trowDimension.forEach((value) => {\n\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: value });\n\t\t\tconst key =\n\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\tlabelDimension.push(value.label);\n\t\t\tkeyDimension.push(key);\n\t\t});\n\t}\n\n\t// setLabelDimension(labelDimension);\n\t// setKeyDimension(keyDimension);\n\n\tconst rowHeaderLabel = handleHeaderLabel(\n\t\trows,\n\t\trowDimension,\n\t\trenderMetric,\n\t\t0,\n\t\tupdateSortRow,\n\t\tazRow,\n\t\t'',\n\t\t'ROW',\n\t);\n\n\tconst columnHeaderLabel = handleHeaderLabel(\n\t\trows,\n\t\tcolumnDimension,\n\t\trenderMetric,\n\t\t0,\n\t\tupdateSortColumn,\n\t\tazColumn,\n\t\t'',\n\t\t'COLUMN',\n\t);\n\n\tarrRow = rowHeaderLabel.map((rowItem) => rowItem.value?.toString() || '');\n\tarrColumn = columnHeaderLabel.map((colItem) => colItem.value?.toString() || '');\n\n\trowHeaderLabel.forEach((rowItem, rowIndex) => {\n\t\tconst rowItemId = typeof rowItem.cellId === 'string' ? rowItem.cellId.split(';') : '';\n\t\tconst arrRowItemId = typeof rowItemId[0] === 'string' ? rowItemId[0].split('>') : [];\n\n\t\tif (columnHeaderLabel.length > 0) {\n\t\t\tcolumnHeaderLabel.forEach((columnItem, columnIndex) => {\n\t\t\t\tfor (const metric of renderMetric) {\n\t\t\t\t\tlet isValid = false;\n\t\t\t\t\tlet value = 0;\n\n\t\t\t\t\tconst metricAggregation = metric.aliasAggregation || metric.aggregation || '';\n\n\t\t\t\t\tconst columnItemId =\n\t\t\t\t\t\ttypeof columnItem.cellId === 'string' ? columnItem.cellId.split(';') : '';\n\t\t\t\t\tconst arrColumnItemId =\n\t\t\t\t\t\ttypeof columnItemId[1] === 'string' ? columnItemId[1].split('>') : [];\n\n\t\t\t\t\t// Compute cell of table\n\t\t\t\t\t// biome-ignore lint/suspicious/useIterableCallbackReturn: \"\"\n\t\t\t\t\trows.some((item) => {\n\t\t\t\t\t\tconst checkIdRowDimension = rowDimension.every((dimension, index) => {\n\t\t\t\t\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: dimension });\n\t\t\t\t\t\t\tconst key =\n\t\t\t\t\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\t\t\t\t\treturn `${item[key]}` === arrRowItemId[index];\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst checkIdColumnDimension = columnDimension.every((dimension, index) => {\n\t\t\t\t\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: dimension });\n\t\t\t\t\t\t\tconst key =\n\t\t\t\t\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\t\t\t\t\treturn `${item[key]}` === arrColumnItemId[index];\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (checkIdRowDimension && checkIdColumnDimension) {\n\t\t\t\t\t\t\tif (Array.isArray(item.aggregations) && item.aggregations.length > 0) {\n\t\t\t\t\t\t\t\tlet valueItem = 0;\n\n\t\t\t\t\t\t\t\tfor (const aggItem of item.aggregations) {\n\t\t\t\t\t\t\t\t\tif (aggItem.name === metric.name && aggItem.type === metricAggregation) {\n\t\t\t\t\t\t\t\t\t\tvalueItem += +aggItem.value;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t\t\tvalue += valueItem;\n\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t\tvalue += +item[metric.name];\n\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tarrData.push({\n\t\t\t\t\t\t\tx: columnIndex,\n\t\t\t\t\t\t\ty: rowIndex,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tvalueLabel: Utils.helpers.formatValue({ value, field: metric }).toString(),\n\t\t\t\t\t\t\tdataY: rowItem.value?.toString() || '',\n\t\t\t\t\t\t\tdataX: columnItem.value?.toString() || '',\n\t\t\t\t\t\t\trawDataX: columnItem.rawValue?.toString() || '',\n\t\t\t\t\t\t\trawDataY: rowItem.rawValue?.toString() || '',\n\t\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\treturn { metricLabel, labelDimension, keyDimension, arrColumn, arrRow, data: arrData };\n};\n","import type { NodeViewProps } from '@tiptap/react';\nimport { useMemo, useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { useChartNodeView } from '@/hooks/useChartNodeView';\nimport { HeatmapAttrsSchema } from '@/schemas/tiptap';\nimport type { HeatmapAttrs } from '@/types/tiptap';\nimport { Utils } from '@/utils';\nimport { serializeReportPerfData } from '../utils';\n\ntype Params = {\n\tnodeViewProps: NodeViewProps;\n};\n\nexport const useHeatmapNodeView = (params: Params) => {\n\tconst { nodeViewProps } = params;\n\tconst {\n\t\textension: { options = {} },\n\t\tnode,\n\t} = nodeViewProps;\n\n\tconst messageId = `${options.messageId}`;\n\tconst dataSourceId = parseInt(options.dataSourceId, 2) || 0;\n\n\tconst [attrs, setAttrs] = useState<HeatmapAttrs>();\n\n\tconst { data, dataSourceSchema, isLoading, error } = useChartNodeView({\n\t\tid: messageId,\n\t\tattrs,\n\t\tdataSourceId,\n\t\tenabled: !!attrs,\n\t});\n\n\tuseDeepCompareEffect(() => {\n\t\tsetAttrs(HeatmapAttrsSchema.parse(node.attrs));\n\t}, [node.attrs]);\n\n\tconst serializedData = useMemo(() => {\n\t\tif (!(data && attrs && dataSourceSchema)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst settings = Utils.nodeView.report.attrsToCompSetting({\n\t\t\tdataSourceSchema,\n\t\t\tattrs,\n\t\t});\n\n\t\treturn {\n\t\t\t...serializeReportPerfData({\n\t\t\t\tdata,\n\t\t\t\tsettings,\n\t\t\t}),\n\n\t\t\tsettings,\n\t\t};\n\t}, [data, attrs, dataSourceSchema]);\n\n\treturn { ...serializedData, isLoading, error };\n};\n","import { Report } from '@antscorp/antsomi-charts';\nimport { Spin } from '@antscorp/antsomi-ui';\nimport type { ChartNodeViewProps } from '@/types/tiptap';\nimport { useHeatmapNodeView } from './hooks';\n\nexport const HeatmapNodeView = (props: ChartNodeViewProps) => {\n\tconst { chartWrapperSize, renderDropdownAction } = props;\n\n\tconst {\n\t\tdata,\n\t\tarrColumn,\n\t\tarrRow,\n\t\tlabelDimension,\n\t\tmetricLabel,\n\t\tkeyDimension,\n\t\tsettings,\n\t\tisLoading,\n\t} = useHeatmapNodeView({\n\t\tnodeViewProps: props,\n\t});\n\n\tif (isLoading || !data || !settings) {\n\t\treturn <Spin indicatorSize={20} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Report.Heatmap\n\t\t\t\tdata={data}\n\t\t\t\tdimension={settings.dimension}\n\t\t\t\tarrXAxis={arrColumn}\n\t\t\t\tarrYAxis={arrRow}\n\t\t\t\tkeyDimension={keyDimension}\n\t\t\t\tlabelDimension={labelDimension}\n\t\t\t\tmetricLabel={metricLabel}\n\t\t\t\twidth={chartWrapperSize?.width}\n\t\t\t\theight={chartWrapperSize?.height}\n\t\t\t/>\n\n\t\t\t{renderDropdownAction(data)}\n\t\t</>\n\t);\n};\n"],"names":["groupBy","arr","getKeyFromItem","result","i","item","key","isArray","value","random","number","text","possible","handleHeaderLabel","rowsHeader","dimension","metric","dataSort","az","headerId","type","_headerId","infoField","Utils","processKey","rowsHeaderClone","dimensionId","dimensionName","dataType","semantics","arrayHeader","itemSort","sortId","sortType","groupRow","row","groupId","_id","length","aggItem","a","cellId","_cellId","level","isNumber","orderBy","valueItem","arrValue","imgPath","labelLink","formatDataResponse","data","rows","newRows","fields","arrAggregation","serializeReportPerfData","params","settings","columnDimension","rowDimension","sortRow","sortColumn","azRow","azColumn","metrics","metricLabel","renderMetric","conceptTypeSortRow","conceptTypeSortColumn","updateSortRow","updateSortColumn","label","arrData","labelDimension","keyDimension","arrRow","arrColumn","rowHeaderLabel","columnHeaderLabel","rowItem","colItem","rowIndex","rowItemId","arrRowItemId","columnItem","columnIndex","isValid","metricAggregation","columnItemId","arrColumnItemId","checkIdRowDimension","index","checkIdColumnDimension","useHeatmapNodeView","nodeViewProps","options","node","messageId","dataSourceId","attrs","setAttrs","useState","dataSourceSchema","isLoading","error","useChartNodeView","useDeepCompareEffect","HeatmapAttrsSchema","useMemo","HeatmapNodeView","props","chartWrapperSize","renderDropdownAction","Spin","Report"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Report as b } from "@antscorp/antsomi-charts";
|
|
2
|
+
import { Spin as L } from "@antscorp/antsomi-ui";
|
|
3
|
+
import { useState as T, useMemo as M } from "react";
|
|
4
|
+
import { ae as V, U as N, ac as O, af as _, ag as z, a8 as H } from "./index-C19D3Esg.mjs";
|
|
5
|
+
import { u as F } from "./useGetSchema-IqknBZGf.mjs";
|
|
6
|
+
import { g as G } from "./index-ErWxfrxC.mjs";
|
|
7
|
+
const P = 10;
|
|
8
|
+
function K(g) {
|
|
9
|
+
const { apiData: l, metrics: u, dimensions: o, numberOfSlice: c = P } = g;
|
|
10
|
+
function I() {
|
|
11
|
+
const { rows: a = [] } = l, s = [];
|
|
12
|
+
for (const t of a) {
|
|
13
|
+
const [n, S] = t;
|
|
14
|
+
s.push({
|
|
15
|
+
aggregations: [
|
|
16
|
+
{
|
|
17
|
+
name: S.name,
|
|
18
|
+
value: S.value,
|
|
19
|
+
type: S.aggregationType
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
dimension: {
|
|
23
|
+
id: n.value,
|
|
24
|
+
name: n.value
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
...z(l, ["rows"]),
|
|
30
|
+
rows: s
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const r = [], { rows: p } = I(), i = {};
|
|
34
|
+
let m, e = "", w = 0, h = 0, f = 0, E = 0;
|
|
35
|
+
u.length > 0 && (m = u[0], e = m.name || "");
|
|
36
|
+
const v = o.at(0);
|
|
37
|
+
if (!(e && m && v))
|
|
38
|
+
return { data: [], totalValue: 0 };
|
|
39
|
+
for (const a of p) {
|
|
40
|
+
let s = 0;
|
|
41
|
+
if (e && a.aggregations && a.aggregations.length > 0) {
|
|
42
|
+
const t = a.aggregations.find((n) => n.name === e);
|
|
43
|
+
t?.value && (s = +t.value);
|
|
44
|
+
}
|
|
45
|
+
s = +V({
|
|
46
|
+
field: m,
|
|
47
|
+
value: s
|
|
48
|
+
}), typeof i[e] != "number" && (i[e] = 0), i[e] += s;
|
|
49
|
+
}
|
|
50
|
+
return p.forEach((a, s) => {
|
|
51
|
+
let t = a.dimension.name, n = 0, S = 0;
|
|
52
|
+
if (t && o.length > 0 && ["IMAGE", "HYPERLINK"].includes(o[0].dataType)) {
|
|
53
|
+
const d = N.helpers.formattedHyperlink(t, "—");
|
|
54
|
+
if (d.length <= 0)
|
|
55
|
+
return;
|
|
56
|
+
v.dataType === "IMAGE" ? t = d[0] : v.dataType === "HYPERLINK" && (t = d[1]);
|
|
57
|
+
}
|
|
58
|
+
if (t = V({
|
|
59
|
+
value: t,
|
|
60
|
+
field: v
|
|
61
|
+
}).toString(), t = O({
|
|
62
|
+
value: t,
|
|
63
|
+
field: v
|
|
64
|
+
}).toString(), e && a.aggregations.length > 0) {
|
|
65
|
+
const d = a.aggregations.find((C) => C.name === e);
|
|
66
|
+
d?.value && (n = +d.value);
|
|
67
|
+
}
|
|
68
|
+
n = +V({
|
|
69
|
+
value: n,
|
|
70
|
+
field: m
|
|
71
|
+
}), w += n, typeof i[e] == "number" && (S = n / i[e] * 100);
|
|
72
|
+
const R = +a.dimension.id == -1, y = p.length, A = Math.min(y, c) - 1, D = h === P - 1 && !R || y < P && c >= y;
|
|
73
|
+
if (h < A || D) {
|
|
74
|
+
const d = typeof a.dimension.id > "u" ? "" : a.dimension.id;
|
|
75
|
+
r.push({
|
|
76
|
+
id: _(d) ? `null_${s}` : d,
|
|
77
|
+
name: t,
|
|
78
|
+
value: n,
|
|
79
|
+
percent: S
|
|
80
|
+
}), h++;
|
|
81
|
+
} else
|
|
82
|
+
f += n, s === p.length - 1 && typeof i[e] == "number" && (E = f / i[e] * 100);
|
|
83
|
+
}), r.push({
|
|
84
|
+
id: -1,
|
|
85
|
+
name: "Other",
|
|
86
|
+
value: f,
|
|
87
|
+
percent: E
|
|
88
|
+
}), {
|
|
89
|
+
data: r.length > 0 ? r : [],
|
|
90
|
+
totalValue: w
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const U = (g) => {
|
|
94
|
+
const { nodeViewProps: l } = g, {
|
|
95
|
+
extension: { options: u = {} },
|
|
96
|
+
node: o
|
|
97
|
+
} = l, c = `${u.messageId}`, I = parseInt(u.dataSourceId, 2) || 0, [r, p] = T(), { data: i, dataSourceSchema: m, isLoading: e, error: w } = F({
|
|
98
|
+
id: c,
|
|
99
|
+
attrs: r,
|
|
100
|
+
dataSourceId: I,
|
|
101
|
+
enabled: !!r
|
|
102
|
+
});
|
|
103
|
+
H(() => {
|
|
104
|
+
p(G.parse(o.attrs));
|
|
105
|
+
}, [o.attrs]);
|
|
106
|
+
const h = M(() => {
|
|
107
|
+
if (!(i && r && m))
|
|
108
|
+
return null;
|
|
109
|
+
const f = N.nodeView.report.attrsToCompSetting({
|
|
110
|
+
dataSourceSchema: m,
|
|
111
|
+
attrs: r
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
data: K({
|
|
115
|
+
apiData: i,
|
|
116
|
+
dimensions: f.dimension,
|
|
117
|
+
metrics: f.metric
|
|
118
|
+
}),
|
|
119
|
+
settings: f
|
|
120
|
+
};
|
|
121
|
+
}, [i, r, m]);
|
|
122
|
+
return { data: h?.data, settings: h?.settings, isLoading: e, error: w };
|
|
123
|
+
}, X = (g) => {
|
|
124
|
+
const { chartWrapperSize: l, renderDropdownAction: u } = g, { data: o, settings: c, isLoading: I } = U({
|
|
125
|
+
nodeViewProps: g
|
|
126
|
+
});
|
|
127
|
+
return I || !o || !c || !l ? /* @__PURE__ */ React.createElement(L, { indicatorSize: 20 }) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
128
|
+
b.PieChart,
|
|
129
|
+
{
|
|
130
|
+
data: o.data,
|
|
131
|
+
metric: c.metric,
|
|
132
|
+
dimension: c.dimension,
|
|
133
|
+
minWidthOfLegend: 200,
|
|
134
|
+
width: l.width,
|
|
135
|
+
height: l.height
|
|
136
|
+
}
|
|
137
|
+
), u(o.data));
|
|
138
|
+
};
|
|
139
|
+
export {
|
|
140
|
+
X as PieChartNodeView
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=Component-BW_rCSr4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component-BW_rCSr4.mjs","sources":["../src/components/ConversationMessage/extensions/NodeViews/PieChart/utils.ts","../src/components/ConversationMessage/extensions/NodeViews/PieChart/hooks/usePieChartNodeView.ts","../src/components/ConversationMessage/extensions/NodeViews/PieChart/Component.tsx"],"sourcesContent":["import { isNull, omit } from 'es-toolkit';\nimport type { ApiPieChartData, Field, PieChartData } from '@/types';\nimport { Utils } from '@/utils';\nimport { convertValueFromDataType } from '@/utils/helpers/convertValueFromDataType';\nimport { formatValue } from '@/utils/helpers/formatValue';\n\nconst MAX_SLICE_IN_PIE = 10;\n\nexport function formatReportPerfData(params: {\n\tapiData: ApiPieChartData;\n\tmetrics: Field[];\n\tdimensions: Field[];\n\tnumberOfSlice?: number;\n}): PieChartData {\n\tconst { apiData, metrics, dimensions, numberOfSlice = MAX_SLICE_IN_PIE } = params;\n\n\ttype Data = {\n\t\tid: string | number;\n\t\tname: string;\n\t\tvalue: number;\n\t\tpercent: number;\n\t};\n\n\tfunction formatApiData() {\n\t\ttype TAggregation = {\n\t\t\tname: string;\n\t\t\ttype: string;\n\t\t\tvalue: number[];\n\t\t};\n\n\t\ttype TDimension = {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t};\n\n\t\tconst { rows = [] } = apiData;\n\n\t\tconst newRows: { aggregations: TAggregation[]; dimension: TDimension }[] = [];\n\n\t\tfor (const fields of rows) {\n\t\t\tconst [fieldInfo, fieldValue] = fields;\n\n\t\t\tnewRows.push({\n\t\t\t\taggregations: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: fieldValue.name,\n\t\t\t\t\t\tvalue: fieldValue.value,\n\t\t\t\t\t\ttype: fieldValue.aggregationType,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdimension: {\n\t\t\t\t\tid: fieldInfo.value,\n\t\t\t\t\tname: fieldInfo.value,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\t...omit(apiData, ['rows']),\n\t\t\trows: newRows,\n\t\t};\n\t}\n\n\tconst arrData: Data[] = [];\n\n\tconst { rows } = formatApiData();\n\n\tconst summary: Record<string, number> = {};\n\tlet isNegativeData = false;\n\n\tlet metric: Field | undefined;\n\tlet metricName = '';\n\tlet totalValue = 0;\n\tlet countNumber = 0;\n\tlet otherValue = 0;\n\tlet otherPercent = 0;\n\n\tif (metrics.length > 0) {\n\t\tmetric = metrics[0];\n\n\t\tmetricName = metric.name || '';\n\t}\n\n\tconst dimension = dimensions.at(0);\n\n\tif (!(metricName && metric && dimension)) {\n\t\treturn { data: [], totalValue: 0 };\n\t}\n\n\tfor (const row of rows) {\n\t\tlet value = 0;\n\n\t\tif (metricName && row.aggregations && row.aggregations.length > 0) {\n\t\t\t// Handle response aggregations\n\t\t\tconst aggregationItem = row.aggregations.find((aggregation) => {\n\t\t\t\treturn aggregation.name === metricName;\n\t\t\t});\n\n\t\t\tif (aggregationItem?.value) {\n\t\t\t\tvalue = +aggregationItem.value;\n\t\t\t}\n\t\t}\n\n\t\tvalue = +convertValueFromDataType({\n\t\t\tfield: metric,\n\t\t\tvalue,\n\t\t});\n\n\t\tif (typeof summary[metricName] !== 'number') {\n\t\t\tsummary[metricName] = 0;\n\t\t}\n\n\t\tsummary[metricName] += value;\n\t}\n\n\trows.forEach((row, rowIndex) => {\n\t\tlet dimensionName = row.dimension.name;\n\t\tlet value = 0;\n\t\tlet percent = 0;\n\n\t\tif (\n\t\t\tdimensionName &&\n\t\t\tdimensions.length > 0 &&\n\t\t\t['IMAGE', 'HYPERLINK'].includes(dimensions[0].dataType)\n\t\t) {\n\t\t\tconst arrValues = Utils.helpers.formattedHyperlink(dimensionName, '—');\n\n\t\t\tif (arrValues.length <= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (dimension.dataType === 'IMAGE') {\n\t\t\t\tdimensionName = arrValues[0];\n\t\t\t} else if (dimension.dataType === 'HYPERLINK') {\n\t\t\t\tdimensionName = arrValues[1];\n\t\t\t}\n\t\t}\n\n\t\tdimensionName = convertValueFromDataType({\n\t\t\tvalue: dimensionName,\n\t\t\tfield: dimension,\n\t\t}).toString();\n\n\t\tdimensionName = formatValue({\n\t\t\tvalue: dimensionName,\n\t\t\tfield: dimension,\n\t\t}).toString();\n\n\t\tif (metricName && row.aggregations.length > 0) {\n\t\t\t// Handle response aggregations\n\t\t\tconst aggregationItem = row.aggregations.find((aggregation) => {\n\t\t\t\treturn aggregation.name === metricName;\n\t\t\t});\n\n\t\t\tif (aggregationItem?.value) {\n\t\t\t\tvalue = +aggregationItem.value;\n\t\t\t}\n\t\t}\n\t\t// else if (\n\t\t// \tmetricName &&\n\t\t// \ttypeof row['metrics'] !== 'undefined' &&\n\t\t// \ttypeof row['metrics'][metricName] !== 'undefined'\n\t\t// ) {\n\t\t// \tvalue = +row['metrics'][metricName];\n\t\t// }\n\n\t\tif (+value < 0) {\n\t\t\tisNegativeData = true;\n\t\t}\n\n\t\t// Format value\n\t\tvalue = +convertValueFromDataType({\n\t\t\tvalue,\n\t\t\tfield: metric,\n\t\t});\n\n\t\ttotalValue += value;\n\n\t\tif (typeof summary[metricName] === 'number') {\n\t\t\tpercent = (value / summary[metricName]) * 100;\n\t\t}\n\n\t\tconst isSliceOtherAPI = +row.dimension.id === -1;\n\t\tconst quantityOfRows = rows.length;\n\t\tconst minAcceptedSlice = Math.min(quantityOfRows, numberOfSlice) - 1;\n\t\tconst isShowNormalSlice =\n\t\t\t(countNumber === MAX_SLICE_IN_PIE - 1 && !isSliceOtherAPI) ||\n\t\t\t(quantityOfRows < MAX_SLICE_IN_PIE && numberOfSlice >= quantityOfRows);\n\n\t\tif (countNumber < minAcceptedSlice || isShowNormalSlice) {\n\t\t\tconst id = typeof row.dimension.id === 'undefined' ? '' : row.dimension.id;\n\n\t\t\tarrData.push({\n\t\t\t\tid: isNull(id) ? `null_${rowIndex}` : id,\n\t\t\t\tname: dimensionName,\n\t\t\t\tvalue,\n\t\t\t\tpercent,\n\t\t\t});\n\n\t\t\tcountNumber++;\n\t\t} else {\n\t\t\totherValue += value;\n\n\t\t\tif (rowIndex === rows.length - 1 && typeof summary[metricName] === 'number') {\n\t\t\t\totherPercent = (otherValue / summary[metricName]) * 100;\n\t\t\t}\n\t\t}\n\t});\n\n\tarrData.push({\n\t\tid: -1,\n\t\tname: 'Other',\n\t\tvalue: otherValue,\n\t\tpercent: otherPercent,\n\t});\n\n\treturn {\n\t\tdata: arrData.length > 0 ? arrData : [],\n\t\ttotalValue,\n\t};\n}\n","import { useMemo, useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { useChartNodeView } from '@/hooks/useChartNodeView';\nimport { PieChartAttrsSchema } from '@/schemas/tiptap';\nimport type { ChartNodeViewProps, PieChartAttrs } from '@/types/tiptap';\nimport { Utils } from '@/utils';\nimport { formatReportPerfData } from '../utils';\n\ntype Params = {\n\tnodeViewProps: ChartNodeViewProps;\n};\n\nexport const usePieChartNodeView = (params: Params) => {\n\tconst { nodeViewProps } = params;\n\tconst {\n\t\textension: { options = {} },\n\t\tnode,\n\t} = nodeViewProps;\n\n\tconst messageId = `${options.messageId}`;\n\tconst dataSourceId = parseInt(options.dataSourceId, 2) || 0;\n\n\tconst [attrs, setAttrs] = useState<PieChartAttrs>();\n\n\tconst { data, dataSourceSchema, isLoading, error } = useChartNodeView({\n\t\tid: messageId,\n\t\tattrs,\n\t\tdataSourceId,\n\t\tenabled: !!attrs,\n\t});\n\n\tuseDeepCompareEffect(() => {\n\t\tsetAttrs(PieChartAttrsSchema.parse(node.attrs));\n\t}, [node.attrs]);\n\n\tconst serializedData = useMemo(() => {\n\t\tif (!(data && attrs && dataSourceSchema)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst settings = Utils.nodeView.report.attrsToCompSetting({\n\t\t\tdataSourceSchema,\n\t\t\tattrs,\n\t\t});\n\n\t\treturn {\n\t\t\tdata: formatReportPerfData({\n\t\t\t\tapiData: data,\n\t\t\t\tdimensions: settings.dimension,\n\t\t\t\tmetrics: settings.metric,\n\t\t\t}),\n\t\t\tsettings,\n\t\t};\n\t}, [data, attrs, dataSourceSchema]);\n\n\treturn { data: serializedData?.data, settings: serializedData?.settings, isLoading, error };\n};\n","import { Report } from '@antscorp/antsomi-charts';\nimport { Spin } from '@antscorp/antsomi-ui';\nimport type { ChartNodeViewProps } from '@/types/tiptap';\nimport { usePieChartNodeView } from './hooks';\n\nexport const PieChartNodeView = (props: ChartNodeViewProps) => {\n\tconst { chartWrapperSize, renderDropdownAction } = props;\n\n\tconst { data, settings, isLoading } = usePieChartNodeView({\n\t\tnodeViewProps: props,\n\t});\n\n\tif (isLoading || !data || !settings || !chartWrapperSize) {\n\t\treturn <Spin indicatorSize={20} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Report.PieChart\n\t\t\t\tdata={data.data}\n\t\t\t\tmetric={settings.metric}\n\t\t\t\tdimension={settings.dimension}\n\t\t\t\tminWidthOfLegend={200}\n\t\t\t\twidth={chartWrapperSize.width}\n\t\t\t\theight={chartWrapperSize.height}\n\t\t\t/>\n\n\t\t\t{renderDropdownAction(data.data)}\n\t\t</>\n\t);\n};\n"],"names":["MAX_SLICE_IN_PIE","formatReportPerfData","params","apiData","metrics","dimensions","numberOfSlice","formatApiData","rows","newRows","fields","fieldInfo","fieldValue","omit","arrData","summary","metric","metricName","totalValue","countNumber","otherValue","otherPercent","dimension","row","value","aggregationItem","aggregation","convertValueFromDataType","rowIndex","dimensionName","percent","arrValues","Utils","formatValue","isSliceOtherAPI","quantityOfRows","minAcceptedSlice","isShowNormalSlice","id","isNull","usePieChartNodeView","nodeViewProps","options","node","messageId","dataSourceId","attrs","setAttrs","useState","data","dataSourceSchema","isLoading","error","useChartNodeView","useDeepCompareEffect","PieChartAttrsSchema","serializedData","useMemo","settings","PieChartNodeView","props","chartWrapperSize","renderDropdownAction","Spin","Report"],"mappings":"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"}
|