quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 4.75 kB
JavaScript
import{columnIndexOf,columnMinValue,columnMaxValue,columnMinDiff,columnExtents,columnUnique,addColumnsSchema,addColumnsData,isUTCEnabled}from'./utils/datatable-utils';import{addHandler,triggerEvent,removeHandler}from'./utils/event-handler';export default class DataTable{constructor(a,b,c,d,e,f,g){this._dataStore=a,this._parentTable=e,this._children=[],this._childrenTableIDs=[],this._opsFunnel=f,this._data=b||[],this._schema=c,this._config=d,this._id=g;let h,i=1;if(this._id||(h=this._parentTable&&this._parentTable._id?this._parentTable._id:'table_1',this._id=h+'_'+i),this._parentTable){for(;this._parentTable._childrenTableIDs.includes(this._id);)h?this._id=h+'_'+ ++i:this._id+='_1';this._parentTable._children.push(this),this._parentTable._childrenTableIDs.push(this._id)}this._result=null}_appendRows(a){let b=this._children&&this._children.length||0,c=this._result&&this._result.schema.length||0;c&&(this._calcColumns=[]);for(let b=0;b<c;b++)this._result.schema[b].calcFn&&this._calcColumns.push(this._result.schema[b]);this._result&&delete this._result;for(let c=0;c<b;c++)this._children[c]._appendRows(a)}count(){let a=this._executeFunnel();return a.data.length}getSchema(){let a=this._executeFunnel();return a.schema}getID(){return this._id}getDataStore(){return this._dataStore}getChildren(a){if(a){for(let b=0;b<this._children.length;b++)if(this._children[b]._id===a)return this._children[b];return null}return this._children}getData(a,b){a=a||0,b=b&&('string'==typeof b||b instanceof String)||null===b?void 0:b;let c=this._executeFunnel();return{data:c.data&&c.data.slice(a,b&&0<b?a+b:b),schema:c.schema}}dispose(){let a=this,b=a._children&&a._children.length||0;if(a._parentTable&&a._parentTable._children){let b;for(b=0;b<a._parentTable._children.length&&!('undefined'!=typeof a._id&&a._id===a._parentTable._children[b]._id);b++);b!==a._parentTable._children.length&&a._parentTable._children.splice(b,1)}delete a._dataStore,delete a._parentTable,delete a._opsFunnel,delete a._data,delete a._schema,delete a._config,delete a._result,delete a._id;for(let c=b-1;0<=c;c--)a._children[c].dispose();delete a._children,delete a._childrenTableIDs,a._trigger('disposed'),delete a._evtHandlers,a=null}min(a){let b=this.getData();return columnMinValue(a,b.data,b.schema)}max(a){let b=this.getData();return columnMaxValue(a,b.data,b.schema)}unique(a){let b=this.getData();return columnUnique(a,b.data,b.schema)}extents(a){let b=this.getData();return columnExtents(a,b.data,b.schema)}addColumns(...a){var b=a.length;if(0<b){this._calcColumns=this._calcColumns||[];for(let c=0;c<b;c++){if(!a[c].name)throw new Error('name is required in column '+(c+1));if(a[c].calcFn&&!(a[c].calcFn instanceof Function))throw new Error('calcFn must be a function in column '+(c+1));a[c].calcFn||(a[c].calcFn=()=>{}),this._calcColumns.push(Object.assign({},a[c]))}}this._trigger('updated',a)}query(a){a&&a.constructor!==Array&&(a=[a]);let b=new DataTable(this._dataStore,this._data,this._schema,this._config,this,a);return b}indexOf(a){let b=this._executeFunnel();return columnIndexOf(a,b.schema)}on(a,b){addHandler(a,b,this)}off(a,b){removeHandler(a,b,this)}_trigger(a,b){triggerEvent(a,this,b)}_executeFunnel(){if(!this._result)if(this._opsFunnel){let a,b,c,d,e;a=this._parentTable._executeFunnel(),b=a.data.slice(0),c=a.schema.slice(0),d=Object.assign({},a.config),e=this._opsFunnel.length;for(let a=0;a<e;a++)if(this._opsFunnel[a]&&this._opsFunnel[a].fn){let e=this._opsFunnel[a].fn(b,c,d);b=e.generatorFn?e.generatorFn():e.data,c=e.schema,d=Object.assign(d,e.config),void 0===d.indexBy&&(d.enableIndex=!1)}this._result={data:b,schema:c,config:d}}else this._result={data:this._data,schema:this._schema,config:this._config};if(this._calcColumns&&0<this._calcColumns.length){let a=addColumnsSchema(this._result.schema,this._calcColumns);this._result.schema=a.schema,this._result.data=addColumnsData(this._result.data,this._result.schema,a.calcColumns),delete this._calcColumns}return this._result}_flushResult(a){let b=this._result&&this._result.schema.length||0;b&&(this._calcColumns=[]);for(let c=0;c<b;c++)this._result.schema[c].calcFn&&this._calcColumns.push(this._result.schema[c]);if(this._result&&(this._result=null),this._children)for(let b=0;b<this._children.length;b++)this._children[b]._flushResult(a);this._trigger('resultFlushed',a)}propagate(a){this.getDataStore()._propagate({trigger:this,payload:a})}_payloadReceiver(a){let b=this._children&&this._children.length||0;a&&a.trigger&&a.trigger!==this&&this._trigger('payloadReceived',a);for(let c=0;c<b;c++)this._children[c]._payloadReceiver(a)}getMinDiff(a){let b=this.getData();return columnMinDiff(a,b.data,b.schema,this._config.indexBy)}isUTCEnabled(a){return isUTCEnabled(a,this.getSchema())}}