UNPKG

@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

99 lines (72 loc) 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.getFieldIdInCell = exports.hasMeasureField = exports.getFieldInfoFromDataset = exports.getFieldInfo = exports.detectFieldType = exports.getFieldDomain = exports.getFieldsByDataType = exports.getFieldByDataType = exports.getFieldByRole = exports.getRemainedFields = exports.getDataListByField = exports.formatFieldInfo = exports.getRoleByFieldType = void 0; const vutils_1 = require("@visactor/vutils"), types_1 = require("../types"), common_1 = require("./common"), calculator_1 = require("@visactor/calculator"), getRoleByFieldType = type => [ types_1.DataType.DATE, types_1.DataType.TIME, types_1.DataType.STRING, types_1.DataType.REGION ].includes(type) ? types_1.ROLE.DIMENSION : types_1.ROLE.MEASURE; exports.getRoleByFieldType = getRoleByFieldType; const formatFieldInfo = fieldInfo => (fieldInfo.forEach((info => { info.role = (0, exports.getRoleByFieldType)(info.type), info.location = (0, exports.getRoleByFieldType)(info.type), info.ratioGranularity = (null == info ? void 0 : info.type) === types_1.DataType.RATIO ? (null == info ? void 0 : info.ratioGranularity) || "%" : null; })), fieldInfo); exports.formatFieldInfo = formatFieldInfo; const getDataListByField = (dataset, fieldName) => (0, vutils_1.uniqArray)(dataset.map((d => d[fieldName]))); exports.getDataListByField = getDataListByField; const getRemainedFields = (cell, fieldInfo) => { const usedFields = Object.values(cell).flat(); return fieldInfo.filter((f => !usedFields.includes(f.fieldName))); }; exports.getRemainedFields = getRemainedFields; const getFieldByRole = (fields, role) => fields.find((f => f.role === role)); exports.getFieldByRole = getFieldByRole; const getFieldByDataType = (fields, dataTypeList) => (fields || []).find((f => dataTypeList.includes(f.type))); exports.getFieldByDataType = getFieldByDataType; const getFieldsByDataType = (fields, dataTypeList) => fields.filter((f => dataTypeList.includes(f.type))); exports.getFieldsByDataType = getFieldsByDataType; const getFieldDomain = (dataset, column, role) => { const domain = dataset.map((d => role === types_1.ROLE.DIMENSION ? d[column] : Number(d[column]))); return role === types_1.ROLE.DIMENSION ? (0, vutils_1.uniqArray)(domain).slice(0, 20) : [ Math.min(...domain), Math.max(...domain) ]; }; exports.getFieldDomain = getFieldDomain; const detectFieldType = (dataset, column) => { let fieldType = [ "年份", "date" ].includes(column) ? types_1.DataType.DATE : void 0; dataset.every((data => { const value = data[column], numberValue = Number(value); return fieldType ? fieldType !== types_1.DataType.DATE || (0, common_1.validateDate)(value) ? fieldType === types_1.DataType.INT ? isNaN(numberValue) ? (fieldType = types_1.DataType.STRING, !1) : ((0, calculator_1.isInteger)(numberValue) || (fieldType = types_1.DataType.FLOAT), !0) : fieldType === types_1.DataType.FLOAT ? !isNaN(numberValue) || (fieldType = types_1.DataType.STRING, !1) : fieldType !== types_1.DataType.STRING : (fieldType = types_1.DataType.STRING, !1) : (fieldType = isNaN(numberValue) ? (0, common_1.validateDate)(value) ? types_1.DataType.DATE : types_1.DataType.STRING : (0, calculator_1.isInteger)(numberValue) ? types_1.DataType.INT : types_1.DataType.FLOAT, !0); })); const role = [ types_1.DataType.STRING, types_1.DataType.DATE ].includes(fieldType) ? types_1.ROLE.DIMENSION : types_1.ROLE.MEASURE, domain = (0, exports.getFieldDomain)(dataset, column, role); return { fieldName: column, type: fieldType, role: role, domain: domain }; }; exports.detectFieldType = detectFieldType; const getFieldInfo = (dataset, columns) => { let sampledDataset = dataset; return dataset.length > 1e3 && (sampledDataset = (0, common_1.sampleSize)(dataset, 1e3)), columns.map((column => (0, exports.detectFieldType)(sampledDataset, column))); }; exports.getFieldInfo = getFieldInfo; const getFieldInfoFromDataset = dataset => { if (!dataset || !dataset.length) return []; const columns = new Set; return dataset.forEach((data => { Object.keys(data).forEach((column => { columns.has(column) || columns.add(column); })); })), (0, exports.getFieldInfo)(dataset, Array.from(columns)); }; exports.getFieldInfoFromDataset = getFieldInfoFromDataset; const hasMeasureField = fieldInfo => fieldInfo.some((f => f.role === types_1.ROLE.MEASURE)); exports.hasMeasureField = hasMeasureField; const getFieldIdInCell = cellField => (0, vutils_1.isArray)(cellField) ? cellField[0] : cellField; exports.getFieldIdInCell = getFieldIdInCell; //# sourceMappingURL=field.js.map