UNPKG

@devgateway/dvz-ui-react

Version:

A modular, embeddable React component library for data visualization and UI, built with TypeScript. Provides reusable components for charts, maps, dashboards, and more, with built-in support for internationalization and Redux integration.

203 lines (202 loc) 8.2 kB
import { jsx as J, Fragment as P } from "react/jsx-runtime"; import F from "react"; import { measuresMap as U, typesMap as q, getTranslatedValue as N, alphaSort as V, dateSort as _, numericSort as T } from "./Utils.js"; const z = (a) => { const { data: t, measures: v, swap: w, dimensions: g, locale: E, customLabels: O } = a; let n = {}; const R = g.filter((j) => j != ""), C = /* @__PURE__ */ new Set(); if (R.length == 0 && t) { const j = U(t), A = /* @__PURE__ */ new Set(), M = /* @__PURE__ */ new Set(); let u = [], r; if (t.metadata && t.metadata.measures) { const y = t.metadata.measures.filter((o) => v.includes(o.value)).sort((o, p) => o.position != null && p.position != null && o.position != p.position ? o.position - p.position : 0); u = [], r = "measure", A.add("measure"); const x = {}; Object.keys(t).forEach((o) => { x[o] = t[o]; }), y.forEach((o) => { const p = {}, b = O[o.value] || N(j[o.value], E); p.type = "measure", p.measureFieldName = o.value, p.measure = b, p[b] = t[o.value], p.variables = x, u.push(p), M.add(b), C.add(j[o.value]); }), n = { categories: A, indexBy: r, keys: Array.from(M), measuresMetadata: C, data: u }; } } return n; }, G = (a) => { const { data: t, measures: v, dimensions: w, overallLabel: g } = a; if (w.length == 1 && t.children) { if (!(t.children.filter((O) => O.value == g).length > 0)) { const O = {}; O.type = w[0], O.value = g, O.label = g, Object.keys(t).forEach((n) => { ["children", "metadata", "type", "value"].includes(n) || (O[n] = t[n]); }), t.children = [O, ...t.children]; } } else w.length == 2 && t.children && t.children.forEach((E) => { if (!(E.children.filter((n) => n.value == g).length > 0)) { const n = {}; n.type = w[1], n.value = g, n.label = g, Object.keys(E).forEach((R) => { ["children", "metadata", "type", "value"].includes(R) || (n[R] = E[R]); }), E.children = [n, ...E.children]; } }); return t; }, Q = (a) => { var u; let t = {}; const { data: v, measures: w, swap: g, dimensions: E, includeOverall: O, locale: n, customLabels: R, colorBy: C, hiddenBars: j } = a, A = E.filter((r) => r != ""), M = (u = v == null ? void 0 : v.metadata) == null ? void 0 : u.measures.filter((r) => w.includes(r.value)).sort((r, y) => r.position != null && y.position != null && r.position != y.position ? r.position - y.position : 0); if (O && w.length == 1 && G(a), A.length == 0 && v) t = z(a); else if (v && v.children && A.length > 0) { const r = U(v), y = q(v), x = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Set(), b = []; let B; g && A.length == 1 && w.length > 0 ? (B = "measure", M.forEach((s) => { const c = {}; c.measure = R[s.value] || N(r[s.value], n), o.add(r[s.value]), v.children.forEach((m) => { const f = N( y[m.type].items.filter((i) => i.value === m.value)[0], n ) || m.value, e = {}; Object.keys(m).forEach((i) => { e[i] = m[i]; }), e[m.type] = m.value.toString(), c.variables = e, x.add(y[m.type]), c[f] = m[s.value], p.add(f); }), b.push({ ...c }); })) : (v.children[0] && (B = v.children[0].type), v.children.forEach((s) => { const c = {}, m = {}; m[s.type] = N( y[s.type] && y[s.type].items ? y[s.type].items.filter((f) => f.value === s.value)[0] : s.value, n ) || s.value, Object.keys(s).forEach((f) => { c[f] = s[f]; }), x.add(y[s.type]), c[s.type] = s.value.toString(), M.map((f) => { const e = R[f.value] || N(r[f.value], n); m[e] = s[f.value], o.add(r[f.value]), p.add(e); }), b.push({ ...m, variables: c, parent_variables: c }); })); const D = Array.from(p); let S = j && b ? b.filter((s) => j.indexOf(s[B]) == -1) : b; a.sort == "alphabetically" && (S = S.sort( (s, c) => V(a.sortReverse, n, s[B], c[B]) )), a.sort == "date" && (S = S.sort( (s, c) => _(a.sortReverse, s[B], c[B]) )), a.sort == "values" && (S = S.sort((s, c) => { const m = Math.max(...D.map((e) => s[e])), f = Math.max(...D.map((e) => c[e])); return T(a.sortReverse, m, f); })), t = { metadata: v.metadata, indexBy: B, dimensionsMetadata: x, measuresMetadata: o, keys: D, data: S }; } return F.Children.map( a.children, (r) => F.cloneElement(r, { options: t }) ); }, W = (a) => { var A, M; const { data: t, measures: v, includeOverall: w, dimensions: g, hiddenBars: E, colorBy: O, locale: n, customLabels: R } = a, C = g.filter((u) => u != ""); let j = {}; if (w && G(a), C.length == 0 && t) j = z(a); else if (t && t.children && t.children.length > 0 && C.length > 0) { U(t); const u = q(t), r = v[0], y = /* @__PURE__ */ new Set(), x = /* @__PURE__ */ new Set(), o = [], p = [], b = t.children[0].type; let B = 0, D, S; t.children.forEach((e) => { const i = { variables: {} }; if (S = N( u[e.type] && u[e.type].items ? u[e.type].items.filter((l) => l.value === e.value)[0] : e.value, n ) || e.value, i[e.type] = S, i[S] = e[r], D = new Object(), D[e.type] = S, i.parent_variables = D, Object.keys(e).forEach((l) => { D[l] = e[l]; }), y.add(u[e.type]), e.children || x.add(S), e.children) e.children.forEach((l) => { D = new Object(), y.add(u[l.type]); const h = N( u[l.type] && u[l.type].items ? u[l.type].items.filter((d) => d.value === l.value)[0] : l.value, n ) || l.value; D[e.type] = S, D[l.type] = h, Object.keys(l).forEach((d) => { D[d] = l[d]; }), i.variables[h] = D, x.add(h), B += l[r], p.push(l[r]), i[h] = l[r]; }); else { const l = new Object(); l[e.type] = S, y.add(u[e.type]), Object.keys(t).forEach((h) => { l[h] = e[h]; }), i.variables = l; } o.push(i); }); const s = n.toUpperCase(), c = O == "id" ? o : o.filter((e) => E.indexOf(e[b]) == -1), m = Array.from(x); a.sort == "alphabetically" ? c.sort( (e, i) => V(a.sortReverse, n, e[b], i[b]) ) : a.sort == "date" ? c.sort( (e, i) => _(a.sortReverse, e[b], i[b]) ) : a.sort == "values" ? c.sort((e, i) => { const l = m.map((d) => e[d]).filter((d) => d).reduce((d, K) => d + K), h = m.map((d) => i[d]).filter((d) => d).reduce((d, K) => d + K); return console.log(m.map((d) => e[d])), l == null ? 1 : h == null ? -1 : T(a.sortReverse, l, h); }) : c.sort((e, i) => { const l = e[a.sort], h = i[a.sort]; return l == null ? 1 : h == null ? -1 : T(a.sortReverse, l, h); }); const f = [...x]; ((M = (A = t == null ? void 0 : t.metadata) == null ? void 0 : A.types) == null ? void 0 : M.length) > 1 && f.sort((e, i) => { var l, h; if (a.sortSecondDimension == "date") return _(a.sortReverseSecondDimension, e, i); if (a.sortSecondDimension == "alphabetically") return V(a.sortReverseSecondDimension, n, e, i); { const d = t.metadata.types[1].items.filter( (L) => L.value == e || L.labels && L.labels[s] == e ), K = t.metadata.types[1].items.filter( (L) => L.value == i || L.labels && L.labels[s] == i ), H = (l = d[0]) == null ? void 0 : l.position, I = (h = K[0]) == null ? void 0 : h.position; return H - I; } }), j = { metadata: t.metadata, dimensionsMetadata: y, indexBy: b, keys: O == "index" ? f : f.filter((e) => E.indexOf(e) == -1), data: c }; } return /* @__PURE__ */ J(P, { children: F.Children.map( a.children, (u) => F.cloneElement(u, { options: j }) ) }); }, $ = (a) => { const { data: t, measures: v, dimensions: w } = a, g = JSON.parse(JSON.stringify(t)); return w.length === 1 ? /* @__PURE__ */ J(Q, { ...a, data: g }) : /* @__PURE__ */ J(W, { ...a, data: g }); }; export { $ as default };