@visactor/vmind
Version:
<div align="center"> <a href="https://github.com/VisActor#gh-light-mode-only" target="_blank"> <img alt="VisActor Logo" width="200" src="https://github.com/VisActor/.github/blob/main/profile/logo_500_200_light.svg"/> </a> <a href="https://githu
81 lines (67 loc) • 3.37 kB
JavaScript
var __rest = this && this.__rest || function(s, e) {
var t = {};
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
var i = 0;
for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
}
return t;
};
import { DataSet, DataView, csvParser, fold as vdatasetFold } from "@visactor/vdataset";
import { getFieldInfo } from "./field";
import { DataType } from "../types";
import { isArray, isNil, isNumber } from "@visactor/vutils";
import { FOLD_NAME, FOLD_VALUE, fold } from "@visactor/chart-advisor";
import { ROLE } from "../types";
export const parseCSVWithVChart = csvString => {
const dataSet = new DataSet;
dataSet.registerParser("csv", csvParser), dataSet.registerTransform("fold", vdatasetFold);
const dataView = new DataView(dataSet, {
name: "data"
});
return dataView.parse(csvString, {
type: "csv"
}), dataView;
};
export const getDataset = csvString => {
const _a = parseCSVWithVChart(csvString).latestData, {columns: columns} = _a, dataColumns = __rest(_a, [ "columns" ]);
return {
dataset: Object.keys(dataColumns).map((key => dataColumns[key])),
columns: columns
};
};
export const convertNumberField = (dataset, fieldInfo) => {
const numberFields = fieldInfo.filter((field => [ DataType.INT, DataType.FLOAT ].includes(field.type))).map((field => field.fieldName));
return dataset.forEach((d => {
numberFields.forEach((numberField => {
isNil(d[numberField]) || (d[numberField] = Number(d[numberField]));
}));
})), dataset;
};
export const parseCSVData = csvString => {
const {dataset: dataset, columns: columns} = getDataset(csvString), fieldInfo = getFieldInfo(dataset, columns);
return convertNumberField(dataset, fieldInfo), {
fieldInfo: fieldInfo,
dataset: dataset
};
};
export const foldDatasetByYField = (dataset, yFieldList, fieldInfo, foldName = FOLD_NAME, foldValue = FOLD_VALUE) => {
const aliasMap = Object.fromEntries(fieldInfo.map((d => [ d.fieldName, d.fieldName ])));
return fold(dataset, yFieldList, foldName, foldValue, aliasMap, !1);
};
export const foldDataTableByYField = (dataTable, yFieldList, fieldInfo, foldName = FOLD_NAME, foldValue = FOLD_VALUE) => {
const aliasMap = Object.fromEntries(fieldInfo.map((d => [ d.fieldName, d.fieldName ])));
return fold(dataTable, yFieldList, foldName, foldValue, aliasMap, !1);
};
export const isValidDataTable = dataTable => !isNil(dataTable) && isArray(dataTable) && dataTable.length > 0;
export const transferMeasureInTable = (dataTable, fieldInfo) => {
const newDataTable = [], measureFields = fieldInfo.filter((field => field.role === ROLE.MEASURE));
return measureFields.length ? (dataTable.forEach((row => {
const newRow = Object.assign({}, row);
measureFields.forEach((field => {
const value = Number(row[field.fieldName]);
isNumber(value) && "" !== row[field.fieldName] && (newRow[field.fieldName] = value);
})), newDataTable.push(newRow);
})), newDataTable) : dataTable;
};
//# sourceMappingURL=dataTable.js.map