quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 5.66 kB
JavaScript
import transpose from'ramda/es/transpose';import Line from'../components/dataset/line';import Column from'../components/dataset/column';import CandleStick from'../components/dataset/candlestick';import OHLC from'../components/dataset/ohlc';import StackGenerator from'../../../../fc-utils/src/stack-generator';import offsetDiverge from'../../../../fc-utils/src/stack-generator/offsets/diverge';import offsetNull from'../../../../fc-utils/src/stack-generator/offsets/null';import{UNDEF,extend2}from'../../../../fc-core/src/lib';const getDataset=a=>'column'===a?Column:'candlestick'===a?CandleStick:'ohlc'===a?OHLC:Line,getSeriesName=a=>a.split(' - ')[0],getMeasureOpName=a=>a.split(' - ').slice(1).join(' - '),getVisibility=a=>a?'visible':'hidden',isOHLC=a=>'ohlc'===a||'candlestick'===a,isPlotStackable=a=>'area'===a||'smooth-area'===a||'step-area'===a||'column'===a;export default(a=>{const b=a.getFromEnv('chart'),c=a.getFromEnv('legendMap'),d=a.config,e=a.getFromEnv('dataSource'),f=e.plotconfig||{},g=a.getFromEnv('ordinalScale'),h=d.isContext?b.config.contextAxesX:b.config.focusAxesX,i=d.isContext?b.config.contextAxesY:b.config.focusAxesY,j=d.isContext,k=d.multiSeriesDatasetMap;j&&d.plotConfigs.forEach(({plots:a})=>{const b=1<a.filter(({plottype:a})=>'column'===a).length?'area':null;a.forEach(a=>{isOHLC(a.plottype)?(a.value=a.close||a.low||a.high||a.open||[],a.plottype=a.typeinnavigator||'line'):'column'===a.plottype&&(a.plottype=a.typeinnavigator||b||(1<a.value.length?'area':'line'))})}),d.plotConfigs.forEach(b=>{const e=h[b.x],l=i[b.y],m=e.binDecider,n=e.scale,o=l.scale,p=l.plotstyle||{},q=b.plots.filter(({plottype:a})=>'column'===a),r=q.length,s=q.map(a=>a.stack?getSeriesName(a.value[0]):a.tableInfo.filterItem||getSeriesName(a.value[0]));let t=0;b.plots.forEach(b=>{let h,i,q,u,v,w,x,y=b.tableInfo,z=y.table,A=y.filterItem,B=l.plot[b.plotInAxisIndex],C=B.style||{},D=B.connectnulldata,E=z.getData(),F=E.data,G=z,H=e.timeFormatterFn,I=[B.value],J={};if(B.group&&(J[B.group.toLowerCase()]=A),h=extend2(extend2({},p),C),!j&&isOHLC(b.plottype)){let a=b.close||b.open||b.high||b.low;(1<a.length||A)&&(b.plottype='line',b.value=a)}if(u=b.plottype,i=f[u]||{},q=f.generic||{},x=getDataset(u),'column'===u&&(v=t++,w=r),isOHLC(u)){const c=transpose([b.open||[b.open],b.high||[b.high],b.low||[b.low],b.close||[b.close]].filter(a=>!!a)),{open:d,high:e,low:f,close:g}=B;d&&I.push(d),e&&I.push(e),f&&I.push(f),g&&I.push(g),1<I.length&&I.shift(),c.forEach(c=>{let d=a.attachChild(x,'dataset');G.on('resultFlushed',a=>{let b=a.data&&a.data.legendInteracted;d.setData({data:a.sender.getData().data,skipLimitCalc:j,legendInteracted:b},!0)}),d.addToEnv('binDecider',m),d.addToEnv('xScale',n),d.addToEnv('yScale',o),d.configure({data:F,scaleX:n,scaleY:o,formatterFn:l.formatterFn,timeFormatterFn:H,styleConfig:h,plotCosmetics:i,genericCosmetics:q,prefix:l.formatLabelPrefix,suffix:l.formatLabelSuffix,indices:[G.indexOf(y.position)].concat(c.map(a=>G.indexOf(a))),primaryColor:!0,type:u,series:b.value,measures:I})})}else if(b.stack&&isPlotStackable(u)){const e=G.indexOf(y.position),f=`${getMeasureOpName(b.value[0])} - sum`,p=new StackGenerator().setValueAccessor((a,b)=>c[getSeriesName(b)].visibility?a[G.indexOf(b)]:0).setKeysAccessor(()=>b.value.filter(a=>0<=G.indexOf(a))).setOffset('log'===o.getType()?offsetNull:offsetDiverge);G.addColumns({name:f,type:'number',calcFn:(a,d)=>b.value.reduce((b,e)=>c[getSeriesName(e)].visibility?b+a[d[e]]:b,0)});let r=p.generate(G.getData().data),s=r.length;G.on('resultFlushed',b=>{r=p.generate(b.sender.getData().data);let d=b.data&&b.data.legendInteracted;if(r.forEach(a=>{let b=A?k[`${A} - ${a.key}`]:k[a.key],g=a.map(a=>[a.data[e],a[0],a[1],a.data[G.indexOf(f)]]),h=b.config.series,i=c[h]&&c[h].visibility;i===UNDEF&&(i=!0),b.setData({visibility:getVisibility(i),data:g,skipLimitCalc:j,legendInteracted:d},!0)}),0===r.length){let b=a.getChildren('dataset');b&&b.forEach(a=>{a.setData({data:[],legendInteracted:d},!0)})}}),r.forEach((b,c)=>{let j=a.attachChild(x,'dataset'),p=getSeriesName(b.key),r=b.map(a=>[a.data[e],a[0],a[1],a.data[G.indexOf(f)]]);B.stack&&(J[B.stack.toLowerCase()]=p),j.addToEnv('binDecider',m),j.addToEnv('xScale',n),j.addToEnv('yScale',o),A?k[`${A} - ${b.key}`]=j:k[b.key]=j,j.configure({data:r,datasetIndex:c,seriesLength:s,scaleX:n,scaleY:o,timeFormatterFn:H,groupIndex:v,totalGroups:w,formatterFn:l.formatterFn,prefix:l.formatLabelPrefix,suffix:l.formatLabelSuffix,styleConfig:h,plotCosmetics:i,genericCosmetics:q,connectNullData:D,indices:[0,2,1,3],primaryColor:g.getRangeValue(p),type:u,series:p,enableMarkers:d.enableMarkers,measures:I,seriesInfo:Object.assign({},J)})})}else b.value.forEach(e=>{let f=a.attachChild(x,'dataset'),k=b.stack?getSeriesName(e):A||getSeriesName(e);G.on('resultFlushed',a=>{let b=f.config.series,d=a.data&&a.data.legendInteracted,e=c[b]&&c[b].visibility,g=f.config.groupIndex,h=f.config.totalGroups;if(e===UNDEF&&(e=!0),d&&'column'===u){let a=s.filter(a=>c[a].visibility);g=a.findIndex(a=>a===b),h=a.length}f.setData({visibility:getVisibility(e),data:a.sender.getData().data,skipLimitCalc:j,legendInteracted:d,groupIndex:g,totalGroups:h},!0)}),b.stack&&(J[b.stack.toLowerCase()]=k),f.addToEnv('binDecider',m),f.addToEnv('xScale',n),f.addToEnv('yScale',o),f.configure({data:F,scaleX:n,scaleY:o,timeFormatterFn:H,groupIndex:v,totalGroups:w,formatterFn:l.formatterFn,prefix:l.formatLabelPrefix,suffix:l.formatLabelSuffix,styleConfig:h,plotCosmetics:i,genericCosmetics:q,connectNullData:D,indices:[G.indexOf(y.position),G.indexOf(e)],primaryColor:g.getRangeValue(k),type:u,series:k,enableMarkers:d.enableMarkers,measures:I,seriesInfo:Object.assign({},J)})})})})});