UNPKG

@zhsz/cool-design-dv

Version:

99 lines (98 loc) 3.49 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const lodashEs = require("lodash-es"); function createSource(standardColumns = [], rows = [], settings = {}) { const headerRow = standardColumns.map((col) => col.displayName || col.name); const source = headerRow.length ? [headerRow] : []; const indexes = getNeedTransformColumnIndexes(standardColumns); const dataRows = []; rows.forEach((row) => { const newRow = Array.isArray(row) ? row : standardColumns.map((col) => { return row[col.name]; }); transformData(standardColumns, indexes, newRow); dataRows.push(newRow); }); const sortColumnIndex = standardColumns.findIndex((col) => !!col.sort); if (sortColumnIndex >= 0) { const col = standardColumns[sortColumnIndex]; const dir = settings.direction; const sortType = typeof col.sort === "string" ? col.sort : dir === "x" ? "asc" : "desc"; dataRows.sort((first, second) => { return sortType === "asc" ? second[sortColumnIndex] - first[sortColumnIndex] : first[sortColumnIndex] - second[sortColumnIndex]; }); } return source.concat(dataRows); } function getNeedTransformColumnIndexes(standardColumns) { const indexes = []; standardColumns.forEach((col, index) => { if (col.unit || col.precision >= 0) { indexes.push(index); } }); return indexes; } function transformData(standardColumns, indexes, row) { indexes.forEach((index) => { const column = standardColumns[index]; let value = row[index]; const unit = column.unit || "n"; const precision = column.precision || 0; switch (unit.toLowerCase()) { case "k": value = value / 1e3; break; case "w": value = value / 1e4; break; case "p": value = value * 100; break; } row[index] = formatValue(value, precision); }); } function formatValue(value, precision) { return Number.parseFloat(value.toFixed(precision)); } function createDimensions(layout, standardColumns, source) { return layout === "column" ? standardColumns : source.map((row) => row[0]); } function getLimitRows(standardColumns, rows, limit) { if (!limit || rows.length <= limit || !standardColumns[1]) { return rows; } const valueColumn = standardColumns[1]; const columnName = valueColumn.name; rows.sort((first, second) => { const firstValue = Array.isArray(first) ? first[1] : first[columnName]; const secondValue = Array.isArray(second) ? second[1] : second[columnName]; return secondValue - firstValue; }); const otherTotal = rows.filter((n, index) => index >= limit).reduce((total, item) => { return total + (Array.isArray(item) ? item[1] : item[columnName]); }, 0); const other = ["其他", otherTotal]; const limitRows = rows.slice(0, limit); limitRows.push(other); return limitRows; } function columnsToStandard({ columns = [] }) { return columns.map((col) => { return lodashEs.isObject(col) ? col : { name: col }; }); } function createDataset(standardColumns, { id, rows, layout = "column", header }, settings) { const limitRows = getLimitRows(standardColumns, rows, settings.limit); const source = createSource(standardColumns, limitRows, settings); const dimensions = createDimensions(layout, standardColumns, source); return { id, dimensions, source, sourceHeader: header }; } exports.columnsToStandard = columnsToStandard; exports.createDataset = createDataset;