UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 12.5 kB
import{SmartRenderer}from'../../../../fc-core/src/component-interface';import SRSTool from'./srs-tool';import{Separator}from'../../../../fc-core/src/toolbox/tools';import{extend2}from'../../../../fc-core/src/lib';import{utcMinute,utcHour,utcDay,utcWeek,utcMonth,utcYear,utcSecond,utcQuarter}from'../../../../fc-utils/src/time-intervals/utc';import{timeMinute,timeHour,timeDay,timeWeek,timeMonth,timeYear,timeSecond,timeQuarter}from'../../../../fc-utils/src/time-intervals';import SmartToolbar from'./smart-toolbar';const DURATION_YEAR=31536e6,DURATION_MONTH=26784e5,DURATION_DAY=864e5,DURATION_HOUR=36e5,COLOR_9E9E9E='#9e9e9e',COLOR_DFDFDF='#dfdfdf',TOOL_PADDING=3,DEFAULT_SEPARATOR_HEIGHT=16,standardIntervals=[31536000000,16070400000,8035200000,2678400000,1296000000,604800000,86400000,43200000,21600000,10800000,3600000,1800000],intervalMap={0:{unit:'year',multiplier:1,intervalName:'1Y',tilldateName:'YTD'},1:{unit:'month',multiplier:6,intervalName:'6M'},2:{unit:'month',multiplier:3,intervalName:'3M',tilldateName:'QTD'},3:{unit:'month',multiplier:1,intervalName:'1M',tilldateName:'MTD'},4:{unit:'day',multiplier:15,intervalName:'15D'},5:{unit:'day',multiplier:7,intervalName:'7D',tilldateName:'WTD'},6:{unit:'day',multiplier:1,intervalName:'1D'},7:{unit:'hour',multiplier:12,intervalName:'12H'},8:{unit:'hour',multiplier:6,intervalName:'6H'},9:{unit:'hour',multiplier:3,intervalName:'3H'},10:{unit:'hour',multiplier:1,intervalName:'1H'},11:{unit:'minute',multiplier:30,intervalName:'30m'}},isValidInterVal=function(a,b,c,d=!1,e){let f=this,g=getInterVal(intervalMap[a].unit,f.getFromEnv('isUTC')),h=3*c[2];return!(d?!(e-g.every(intervalMap[a].multiplier).floor(e)>=h):!(standardIntervals[a]>=b[2]&&standardIntervals[a]>=h))},getInterVal=function(a,b){return'year'===a?b?utcYear:timeYear:'quarter'===a?b?utcQuarter:timeQuarter:'month'===a?b?utcMonth:timeMonth:'week'===a?b?utcWeek:timeWeek:'day'===a?b?utcDay:timeDay:'hour'===a?b?utcHour:timeHour:'minute'===a?b?utcMinute:timeMinute:'second'===a?b?utcSecond:timeSecond:void 0},findRelaventFontSize=function(a){let b=a.activated.config.normal['font-size']||0,c=a.activated.config.hover['font-size']||0,d=a.pressed.config.normal['font-size']||0;return Math.max(parseFloat(b),parseFloat(c),parseFloat(d))+'px'};class StandardRangeSelector extends SmartRenderer{constructor(){super();let a=this;this._handler=function(){let b,c,d,e=this,f=e.getFromEnv('chart'),g=e.config.multiplier,h=e.getFromEnv('isUTC'),i=e.config.unit,j=e.config.fixedAtEnd,k=e.config.fixedAtStart,l=f.getFocusLimit(),m=f.getContextLimit();a.config.clickedButtonDetails=e.config,e.getFromEnv('animationManager').setAnimationState('selectedRange'),d=j?m[1]:l[1],i&&g?(b=getInterVal(i,h),c=j?b.every(g).floor(d):b.offset(d,-g)):k&&(c=m[0]),a.config.lastSelectedButtonConfig={fixedAtEnd:e.config.fixedAtEnd,fixedAtStart:e.config.fixedAtStart,unit:e.config.unit,multiplier:e.config.multiplier},a.config.updatedThroughButton=!0,f.setFocusLimit([c,d])},this._toolbars={}}__setDefaultConfig(){super.__setDefaultConfig();var a=this.config;a.lastSelectedButtonConfig=void 0,a.clickedButtonDetails={},a.labelFontSize='12px',a.takeMaxSize=!1,a.defaultStateStyle={activated:{config:{normal:{fill:COLOR_9E9E9E,stroke:'none',"stroke-width":2,cursor:'pointer',"stroke-opacity":1,"fill-opacity":1,opacity:'1',"font-weight":400,"font-size":'12',"text-anchor":'middle'},hover:{fill:'#5648D4',stroke:'none',"stroke-width":2,cursor:'pointer',"stroke-opacity":1,"fill-opacity":1,opacity:'1',"font-weight":400,"font-size":'12',"text-anchor":'middle'},normalBackground:{fill:'none',"fill-opacity":1,stroke:'none',cursor:'pointer',r:'2px',"stroke-width":'1',"stroke-dasharray":'none',"stroke-opacity":'1',opacity:1},hoverBackground:{fill:'none',"fill-opacity":1,stroke:'none',cursor:'pointer',r:'2px',"stroke-width":'1',"stroke-dasharray":'none',"stroke-opacity":'1',opacity:1}}},pressed:{config:{normal:{fill:'#5648D4',"stroke-width":2,stroke:'none',"symbol-stroke":'#343434',cursor:'pointer',"fill-opacity":1,"stroke-opacity":1,opacity:'1',"font-weight":400,"font-size":'12',"text-anchor":'middle'},hover:{fill:'#5648D4',"stroke-width":2,stroke:'none',"symbol-stroke":'#5648D4',cursor:'pointer',"fill-opacity":1,"stroke-opacity":1,opacity:'1',"font-weight":400,"font-size":'12',"text-anchor":'middle'},normalBackground:{fill:'none',"fill-opacity":1,stroke:'none',cursor:'pointer',r:'2px',"stroke-width":'1',"stroke-dasharray":'none',"stroke-opacity":'1',opacity:1},hoverBackground:{fill:'none',"fill-opacity":1,stroke:'none',cursor:'pointer',r:'2px',"stroke-width":'1',"stroke-dasharray":'none',"stroke-opacity":'1',opacity:1}}}},a.stateStyle={}}configureAttributes(a){super.configureAttributes(a);let b,c,d,e,f,g,h,i,j=this.config,k=this.getFromEnv('chart'),l=this.getFromEnv('getStyleDef'),m=this.getFromEnv('baseTextStyle'),n=j.defaultStateStyle;for(let b in j.contextRangeThreshold=k.getFromEnv('contextBins')[0].getRangeThreshold(),j.focusRangeThreshold=k.getFromEnv('focusBins')[0].getRangeThreshold(),j.contextMinBin=k.getFromEnv('contextBins')[0].getBinMin(),j.focusMinBin=k.getFromEnv('focusBins')[0].getBinMin(),a)a.hasOwnProperty(b)&&(j[b]=a[b]);b=Object.assign({},m,l(j.style.button&&j.style.button.text)),c=Object.assign({},m,l(j.style['button:hover']&&j.style['button:hover'].text)),d=Object.assign({},m,l(j.style['button:active']&&j.style['button:active'].text)),e=l(j.style.button&&j.style.button.background),f=l(j.style['button:hover']&&j.style['button:hover'].background),g=l(j.style['button:active']&&j.style['button:active'].background),(e.fill||e.stroke)&&(j.takeMaxSize=!0),h=l(j.style.separator&&j.style.separator),i={activated:{config:{normal:b,hover:Object.assign({},b,c),normalBackground:e,hoverBackground:Object.assign({},e,f)}},pressed:{config:{normal:Object.assign({},b,d),hover:Object.assign({},b,d,c),normalBackground:Object.assign({},e,g),hoverBackground:Object.assign({},e,g,f)}}},j.stateStyle=extend2(extend2({},n),i),j.stateStyle.separator=h}getTillDateButtons(a,b,c){let d,e,f,g=[],h=this.getFromEnv('chartConfig').contextLimit[1],j=this.getFromEnv('UTC'),k=this.getFromEnv('dateAPI'),l=new Date(h),m=new Date;if(k(l,'FullYear',j)===k(m,'FullYear',j)&&k(l,'Month',j)===k(m,'Month',j)&&k(l,'Date',j)===k(m,'Date',j))for(e=0,f=standardIntervals.length;e<f;e++)a>=standardIntervals[e]&&intervalMap[e].tilldateName&&isValidInterVal.call(this,e,b,c,!0,h)&&(d=extend2({},intervalMap[e]),d.fixedAtEnd=!0,d.fixedAtStart=!1,g.push(d));return g}getSelectionButtonConfig(){let a,b,c,d=this,e=d.config,f=d.getFromEnv('isUTC'),g=e.currentDomain,h={},i=e.totalDomain,j=+g[1]-+g[0];return b=f?utcYear:timeYear,a=f?utcMonth:timeMonth,c=f?utcDay:timeDay,e.lastSelectedButtonConfig?(h={isTillDate:e.lastSelectedButtonConfig.fixedAtEnd&&!e.lastSelectedButtonConfig.fixedAtStart,isAllButton:e.lastSelectedButtonConfig.fixedAtEnd&&e.lastSelectedButtonConfig.fixedAtStart,isIntervalButton:!e.lastSelectedButtonConfig.fixedAtEnd&&!e.lastSelectedButtonConfig.fixedAtStart,multiplier:e.lastSelectedButtonConfig.multiplier,unit:e.lastSelectedButtonConfig.unit},h):j==+i[1]-+i[0]?{isAllButton:!0}:j==+g[1]-+b.floor(g[1])?{isTillDate:!0,multiplier:'1',unit:'year'}:j==+g[1]-+a.floor(g[1])?{isTillDate:!0,multiplier:'1',unit:'month'}:j==+g[1]-+a.every(3).floor(g[1])?{isTillDate:!0,multiplier:'3',unit:'month'}:j==+g[1]-+c.every(7).floor(g[1])?{isTillDate:!0,multiplier:'7',unit:'day'}:d.getHighlightedIntervalButton(j)}getIntervalButtons(a,b,c,d){let e,f=standardIntervals.length,g=[];for(e=f-1;0<e&&!(standardIntervals[e]>=a);e--);return a&&(0>=e?(standardIntervals[0]<=b&&isValidInterVal.call(this,0,c,d)&&g.push(intervalMap[0]),standardIntervals[1]<=b&&isValidInterVal.call(this,1,c,d)&&g.push(intervalMap[1])):e===f-1?(standardIntervals[e-1]<=b&&isValidInterVal.call(this,e-1,c,d)&&g.push(intervalMap[e-1]),standardIntervals[e]<=b&&isValidInterVal.call(this,e,c,d)&&g.push(intervalMap[e])):(standardIntervals[e-1]<=b&&isValidInterVal.call(this,e-1,c,d)&&g.push(intervalMap[e-1]),standardIntervals[e]<=b&&isValidInterVal.call(this,e,c,d)&&g.push(intervalMap[e]),standardIntervals[e+1]<=b&&isValidInterVal.call(this,e+1,c,d)&&g.push(intervalMap[e+1]))),g}getHighlightedIntervalButton(){let a,b,c=this,d=c.config,e=d.intervalButtons,f=d.currentDomain,g=c.getFromEnv('isUTC'),h=e.length,j={};for(a=h-1;0<=a&&(b=getInterVal(e[a].unit,g),+f[0]!=+b.offset(f[1],-e[a].multiplier)&&+f[1]!=+b.offset(f[0],e[a].multiplier));a--);return-1!==a&&(j=extend2({isIntervalButton:!0},intervalMap[a]),j={isIntervalButton:!0,unit:e[a].unit,multiplier:e[a].multiplier},d.lastSelectedButtonConfig=j),j}getToolInfo(){var a=Math.max;let b,c,d,e,f,g=this,h=g.config,j=g.getFromEnv('chart'),k=g.getFromEnv('selectorToolbar'),l={},m=g.getFromEnv('smartLabel'),n=h.stateStyle,o=findRelaventFontSize(n)||h.labelFontSize,p=n.activated.config.normal['font-family'],q=n.activated.config.normal['font-weight'],r=h.currentDomain,s=j.getContextLimit(),t=h.contextRangeThreshold,u=h.focusRangeThreshold,v=h.contextMinBin,w=h.focusMinBin,x=0,y=0,z=h.takeMaxSize,A=+r[1]-+r[0],B=+s[1]-+s[0],C=`intervalToolBar-${k.getId()}-${j.getId()}`,D=`businessToolBar-${k.getId()}-${j.getId()}`,E=`allToolBar-${k.getId()}-${j.getId()}`,F=h.intervalButtons=g.getIntervalButtons(A,B,u,w),G=h.tillDateButtons=g.getTillDateButtons(B,t,v);for(m.setStyle({fontSize:o,fontFamily:p,fontWeight:q}),F.forEach(b=>{let{height:c,width:d}=m.getOriSize(b.intervalName,!1);b.height=c,b.width=d,x=a(c,x),y=a(d,y)}),G.forEach(b=>{let{height:c,width:d}=m.getOriSize(b.tilldateName,!1);b.height=c,b.width=d,x=a(c,x),y=a(d,y)}),e=m.getOriSize('All',!1),x=a(e.height,x),y=a(e.width,y),f=g.getSelectionButtonConfig(),l[C]={type:'tool',def:SmartToolbar,configuration:{hAlign:'left',toolbarhdirection:1,child:{}}},(b=0,c=F.length);b<c;b++)d=f.isIntervalButton&&f.unit===F[b].unit&&f.multiplier===F[b].multiplier?'pressed':'activated',l[C].configuration.child[`intervalButton-${k.getId()}-${j.getId()}-${b}`]={type:'tool',def:SRSTool,configuration:{text:F[b].intervalName,name:'interval',width:z?y:F[b].width,height:z?x:F[b].height,scale:1,marginLeft:b?TOOL_PADDING:0,marginRight:b===c-1?0:TOOL_PADDING,hAlign:'left',symbolStrokeWidth:'2',hoveredState:'normal',state:d,multiplier:F[b].multiplier,unit:F[b].unit,strokeWidth:0,listener:{"fc-click":g._handler},css:n}};if(c&&(l[`separator-${k.getId()}-${j.getId()}-0`]={type:'tool',def:Separator,configuration:{marginLeft:0,marginRight:0,scale:1,height:x<DEFAULT_SEPARATOR_HEIGHT?DEFAULT_SEPARATOR_HEIGHT:x,width:8,hAlign:'left',stroke:n.separator.stroke||COLOR_DFDFDF,css:n.separator}}),c=G.length,c){for(l[D]={type:'tool',def:SmartToolbar,configuration:{hAlign:'left',toolbarhdirection:1,child:{}}},b=0;b<c;b++)d=f.isTillDate&&f.unit===G[b].unit&&f.multiplier===G[b].multiplier&&+r[1]==+s[1]?'pressed':'activated',l[D].configuration.child[`tillDateButton-${k.getId()}-${j.getId()}-${b}`]={type:'tool',def:SRSTool,configuration:{text:G[b].tilldateName,name:'interval',scale:1,width:z?y:G[b].width,height:z?x:G[b].height,state:d,multiplier:G[b].multiplier,unit:G[b].unit,symbolStrokeWidth:'2',hoveredState:'normal',fixedAtStart:G[b].fixedAtStart,fixedAtEnd:G[b].fixedAtEnd,marginLeft:b?TOOL_PADDING:0,marginRight:b===c-1?0:TOOL_PADDING,hAlign:'left',strokeWidth:0,listener:{"fc-click":g._handler},css:n}};l[`separator-${k.getId()}-${j.getId()}-1`]={type:'tool',def:Separator,configuration:{marginLeft:0,marginRight:0,scale:1,height:x<DEFAULT_SEPARATOR_HEIGHT?DEFAULT_SEPARATOR_HEIGHT:x,classIndex:3,itemIndex:0,width:8,hAlign:'left',stroke:n.separator.stroke||COLOR_DFDFDF,css:n.separator}}}return d=f.isAllButton?'pressed':'activated',l[E]={type:'tool',def:SmartToolbar,configuration:{hAlign:'left',toolbarhdirection:1,child:{}}},l[E].configuration.child[`allButton-${k.getId()}-${j.getId()}-0`]={type:'tool',def:SRSTool,configuration:{state:d,width:z?y:e.width,height:z?x:e.height,scale:1,text:'All',name:'interval',marginLeft:0,marginRight:0,hAlign:'left',hoveredState:'normal',symbolStrokeWidth:'2',strokeWidth:0,fixedAtStart:!0,fixedAtEnd:!0,fill:'#00ff00',labelFill:'#00ff00',symbolFill:'#00ff00',listener:{"fc-click":g._handler},css:n}},l}updateOnLimitChange(){let a,b=this,c=b.getFromEnv('chart');b.config.currentDomain=c.getFocusLimit(),a=b.config.currentDomain[1]-b.config.currentDomain[0],b.config.lastSelectedRange&&b.config.lastSelectedRange!==a&&!b.config.updatedThroughButton&&(b.config.lastSelectedButtonConfig=void 0),b.config.lastSelectedRange=a,b.config.updatedThroughButton=!1,b.setData({},!0)}}export default StandardRangeSelector;