@fusioncharts/datatable
Version:
In memory tabular data storage
1 lines • 9.58 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.addColumnsData=addColumnsData;exports.addColumnsSchema=addColumnsSchema;exports.buildDateColumnsFormatter=buildDateColumnsFormatter;exports.columnExtents=columnExtents;exports.columnIndexOf=columnIndexOf;exports.columnMaxValue=columnMaxValue;exports.columnMinDiff=columnMinDiff;exports.columnMinValue=columnMinValue;exports.columnUnique=columnUnique;exports.createTableID=createTableID;exports.indexData=indexData;exports.isUTCEnabled=isUTCEnabled;exports.parseAndIndexData=parseAndIndexData;exports.parseData=parseData;var _typeUtils=require("./typeUtils.js");var _comparators=require("./comparators.js");var _sort=_interopRequireDefault(require("./sort.js"));var _globalConfig=require("../globalConfig.js");var _index=_interopRequireDefault(require("@fusioncharts/utils/src/time-converter/index.js"));var _uid=_interopRequireDefault(require("@fusioncharts/utils/src/uid.js"));var UNDEF;function columnIndexOf(columnName,schema){if(!schema||!columnName)return null;for(var i=0;i<schema.length;i++){if(schema[i]&&schema[i].hasOwnProperty("name")&&schema[i].name===columnName){return i}}return-1}function columnMinValue(columnName,data,schema){var columnIndex,minVal;columnIndex=columnIndexOf(columnName,schema);if(columnIndex===null||columnIndex===-1){return null}if(data&&data.length>0){var valToCheck;minVal=Number.POSITIVE_INFINITY;for(var i=0;i<data.length;i++){valToCheck=schema[columnIndex].type==="interval"?data[i][columnIndex]?data[i][columnIndex].start:null:data[i][columnIndex];if((0,_typeUtils.isNumber)(valToCheck)&&valToCheck<minVal){minVal=valToCheck}}}return minVal}function columnMaxValue(columnName,data,schema){var columnIndex,maxVal;columnIndex=columnIndexOf(columnName,schema);if(columnIndex===null||columnIndex===-1){return null}if(data&&data.length>0){var valToCheck;maxVal=Number.NEGATIVE_INFINITY;for(var i=0;i<data.length;i++){valToCheck=schema[columnIndex].type==="interval"?data[i][columnIndex]?data[i][columnIndex].end:null:data[i][columnIndex];if((0,_typeUtils.isNumber)(valToCheck)&&valToCheck>maxVal){maxVal=valToCheck}}}return maxVal}function columnMinDiff(columnName,data,schema,indexBy){var columnIndex,dataClone=data,dataLength=data.length,minDiff;columnIndex=columnIndexOf(columnName,schema);if(columnIndex===null||columnIndex===-1){return null}if(schema[columnIndex]&&["date","number"].indexOf(schema[columnIndex].type)<0)throw new Error("Operation valid only on date or number columns");if(!indexBy||columnName!==indexBy){dataClone=data.slice(0);dataClone.sort((function(a,b){return(0,_comparators.numberComparator)(a[columnIndex],b[columnIndex])}))}if(dataClone&&dataLength>0){var valToCheck,a,b;minDiff=Number.POSITIVE_INFINITY;for(var i=0;i<dataClone.length-1;i++){a=dataClone[i][columnIndex];b=dataClone[i+1][columnIndex];if((0,_typeUtils.isNumber)(b)&&(0,_typeUtils.isNumber)(a)){valToCheck=b-a;minDiff=(0,_typeUtils.isNumber)(valToCheck)&&valToCheck>=0&&valToCheck<minDiff?valToCheck:minDiff;if(minDiff===0)break}else{break}}}return minDiff===Number.POSITIVE_INFINITY?null:minDiff}function columnExtents(columnName,data,schema){var min=Number.POSITIVE_INFINITY,max=Number.NEGATIVE_INFINITY,columnIndex=columnIndexOf(columnName,schema),valToCheck;if(columnIndex===null||columnIndex===-1){return null}if(data&&data.length>0){for(var i=0;i<data.length;i++){valToCheck=schema[columnIndex].type==="interval"?data[i][columnIndex]?data[i][columnIndex].start:null:data[i][columnIndex];if((0,_typeUtils.isNumber)(valToCheck)&&valToCheck<min){min=valToCheck}valToCheck=schema[columnIndex].type==="interval"?data[i][columnIndex]?data[i][columnIndex].end:null:data[i][columnIndex];if((0,_typeUtils.isNumber)(valToCheck)&&valToCheck>max){max=valToCheck}}}return{min:min,max:max}}function columnUnique(columnName,data,schema){var columnIndex=columnIndexOf(columnName,schema),uniqueVals=[],uniqueList;if(columnIndex===null||columnIndex===-1){return[]}for(var i=0;i<data.length;i++){uniqueVals.push(data[i][columnIndex])}if(data&&data.length>0){uniqueList=Array.from(new Set(uniqueVals));return uniqueList.length===1&&typeof uniqueList[0]==="undefined"?[]:uniqueList}return[]}function addColumnsSchema(schema,columnConfigs){var columnConfigsLen=columnConfigs.length,schemaCopy=schema.slice(0);for(var i=0;i<columnConfigsLen;i++){var schemaLen=schemaCopy.length;columnConfigs[i].originalName=columnConfigs[i].name;for(var j=0;j<schemaLen;j++){if(columnConfigs[i].name===schemaCopy[j].name){columnConfigs[i].i=columnConfigs[i].i&&++columnConfigs[i].i||1;columnConfigs[i].name=columnConfigs[i].originalName+" "+columnConfigs[i].i}if(!columnConfigs[i].type||["string","number","date"].indexOf(columnConfigs[i].type)===-1){columnConfigs[i].type="string"}}delete columnConfigs[i].originalName;delete columnConfigs[i].i;schemaCopy.push({name:columnConfigs[i].name,type:columnConfigs[i].type||"string"});if(columnConfigs[i].calcFn){schemaCopy[schemaCopy.length-1].calcFn=columnConfigs[i].calcFn}if(columnConfigs[i].format){schemaCopy[schemaCopy.length-1].format=columnConfigs[i].format}if(columnConfigs[i].enableUTC){schemaCopy[schemaCopy.length-1].enableUTC=columnConfigs[i].enableUTC}columnConfigs[i].columnIndex=schemaCopy.length-1}return{schema:schemaCopy,calcColumns:columnConfigs}}function addColumnsData(data,schema,columnConfigs){var dataLen=data.length,columnConfigsLen=columnConfigs.length,schemaLen=schema.length,columns={},cellData,dateColumnsAndFormatter=buildDateColumnsFormatter(columnConfigs);for(var i=0;i<schemaLen;i++){columns[schema[i].name]=i}for(var _i=0;_i<dataLen;_i++){for(var j=0;j<columnConfigsLen;j++){if(columnConfigs[j].calcFn){cellData=columnConfigs[j].calcFn(data[_i],columns,_i);cellData=_parseCell(columnConfigs[j],cellData,dateColumnsAndFormatter);data[_i][columnConfigs[j].columnIndex]=cellData}}}return data}function _parseCell(colConfig,val,dateColumnsAndFormatter){if(dateColumnsAndFormatter[colConfig.name]!==UNDEF&&val){if(dateColumnsAndFormatter[colConfig.name]){return+dateColumnsAndFormatter[colConfig.name].parse(val)}return+new Date(val)}else if(colConfig.type==="number"){if((0,_typeUtils.isNumber)(val)){return val}else if(!val){return null}return parseFloat(val)}return val}function parseAndIndexData(data,schema,config){var dateColumnsAndFormatter=buildDateColumnsFormatter(schema),parsedData=parseData(data,schema,dateColumnsAndFormatter);indexData(parsedData,schema,config,dateColumnsAndFormatter);return parsedData}function buildDateColumnsFormatter(schema){var dateColumnsAndFormatter={};for(var i=0;i<schema.length;i++){if(!schema[i].name){throw new Error("Input schema is not in a correct format - each column must have a name")}if(schema[i].type&&schema[i].type==="date"){dateColumnsAndFormatter[schema[i].name]=schema[i].format?(schema[i].enableUTC!==UNDEF?schema[i].enableUTC:(0,_globalConfig.getConfig)("enableUTC"))?_index.default.utcParser(schema[i].format):_index.default.parser(schema[i].format):null}}return dateColumnsAndFormatter}function parseData(data,schema,dateColFormatter){var parsedData=[];if(data.length>0){var dateColumnsAndFormatter=dateColFormatter,i,indexofRowIdColumn=schema.findIndex((function(s){return s.name==="_row_id"}));if(!dateColumnsAndFormatter){dateColumnsAndFormatter=buildDateColumnsFormatter(schema)}if(indexofRowIdColumn===-1){indexofRowIdColumn=schema.push({name:"_row_id",type:"string"})-1}for(var idx=0;idx<data.length;idx++){data[idx][indexofRowIdColumn]=(0,_uid.default)()}try{var columnLength=schema.length,arr,element,arrLen;for(var n=0;n<data.length;n++){arr=[];element=data[n];if(element.constructor===Array){arrLen=Math.min(columnLength,element.length);for(i=0;i<arrLen;i++){arr[i]=_parseCell(schema[i],element[i],dateColumnsAndFormatter)}}else if(typeof element==="object"){for(i=0;i<columnLength;i++){if(element[schema[i].name]){arr[i]=_parseCell(schema[i],element[schema[i].name],dateColumnsAndFormatter)}}}else{continue}parsedData.push(arr)}}catch(e){throw new Error("Error while parsing the data - "+e)}}return parsedData}function indexData(parsedData,schema,config,dateColFormatter){if(config.enableIndex){var i,comparator,dateColumnsAndFormatter;if(!config.indexBy){dateColumnsAndFormatter=dateColFormatter;if(!dateColumnsAndFormatter){dateColumnsAndFormatter=buildDateColumnsFormatter(schema)}var dateColumns=Object.keys(dateColumnsAndFormatter);if(dateColumns.length>0){config.indexBy=dateColumns[0]}else{for(i=0;i<schema.length;i++){if(schema[i].type&&schema[i].type==="number"){config.indexBy=schema[i].name;break}}if(i===schema.length){config.indexBy=schema[0].name}}}for(i=0;i<schema.length;i++){if(schema[i]&&schema[i].name===config.indexBy){break}}if(i===schema.length){throw new Error("Index column is not found in schema")}switch(schema[i].type){case"number":case"date":comparator=_comparators.numberComparator;break;default:comparator=_comparators.stringComparator;break}var deepClone=JSON.parse(JSON.stringify(parsedData));(0,_sort.default)(deepClone,(function(a,b){return comparator(a[i],b[i])}))}}function createTableID(tableIdArr){var tableIdLen=tableIdArr.length,counter=tableIdLen+1;while(tableIdArr.includes("table-"+counter)){counter++}return"table-"+counter}function isUTCEnabled(columnName,schema){var columnIndex;columnIndex=columnIndexOf(columnName,schema);if(columnIndex===null||columnIndex===-1||schema[columnIndex].type!=="date"&&schema[columnIndex].type!=="interval"){return null}return schema[columnIndex].enableUTC!==UNDEF?schema[columnIndex].enableUTC:(0,_globalConfig.getConfig)("enableUTC")}
;