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