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.

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