@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
142 lines (141 loc) • 4.37 kB
JavaScript
import { findIndex, get, find } from 'lodash';
import { EChartFieldType } from '@qn-pandora/app-sdk';
/**
* 根据field的类型获取对应的buckets 和 metrics
* @param fields 所有的fields
*/
export function getBucketMetricNameByFields(fields) {
return {
buckets: getBuckets(fields).map(function (field) { return field.key; }),
metrics: getMetrics(fields).map(function (field) { return field.key; })
};
}
/**
* 根据field的名字, 获取对应列的数据
* @param field field名称
* @param dataset 数据集
* @param isCompare 是否为对比数据
*/
export function getDataOfField(field, dataset, isCompare) {
if (isCompare === void 0) { isCompare = false; }
var _a = dataset.fields, fields = _a === void 0 ? [] : _a, _b = dataset.rows, rows = _b === void 0 ? [] : _b;
var fieldIndex = findIndex(fields, function (item) { return item && item.key === field; });
return fieldIndex > -1
? rows.map(function (row) {
return isCompare ? get(row, [fieldIndex, 1]) : get(row, [fieldIndex, 0]);
})
: [];
}
/**
* 根据field的类型获取对应的buckets
* @param fields 所有的fields
*/
export function getBuckets(fields) {
return fields.filter(function (field) { return field.type === 'bucket'; });
}
/**
* 根据field的类型获取对应的metrics
* @param fields 所有的fields
*/
export function getMetrics(fields) {
return fields.filter(function (field) { return field.type === 'metric'; });
}
/**
* 获取对应field在所有fields中的索引
* @param field 当前field
* @param fields 所有fields
*/
export function getFieldIndex(field, fields) {
return findIndex(fields, function (item) { return item && item.key === field; });
}
/**
* 获取对应field对象
* @param field 当前field
* @param fields 所有fields
*/
export function getField(field, fields) {
return find(fields, function (item) { return item && item.key === field; });
}
/**
* 根据field的类型获取 时间类型的field
* @param fields
* @returns
*/
export function getTimeFields(fields) {
return fields.filter(function (field) { return field.fieldType === EChartFieldType.Time; });
}
/**
* 更新metrics、buckets
* 在metrics 或 buckets 中把对应的 field 删除
* @param metrics 当前的指标数组
* @param buckets 当前的分组数组
* @param field 需要去除的字段 或 字段数值
*/
export function updateMetricBucket(metrics, buckets, field) {
var fields = Array.isArray(field) ? field : [field];
fields.forEach(function (f) { return updateMetricBucketBySingleField(metrics, buckets, f); });
return { metrics: metrics, buckets: buckets };
}
/**
* 更新metrics、buckets
* 在metrics 或 buckets 中把对应的 field 删除
* @param metrics 当前的指标数组
* @param buckets 当前的分组数组
* @param field 需要去除的字段
*/
export function updateMetricBucketBySingleField(metrics, buckets, field) {
var bucketIndex = findIndex(buckets, function (bucket) { return bucket === field; });
if (bucketIndex !== -1) {
buckets.splice(bucketIndex, 1);
return;
}
var metricIndex = findIndex(metrics, function (metric) { return metric === field; });
if (metricIndex !== -1) {
metrics.splice(metricIndex, 1);
}
return { metrics: metrics, buckets: buckets };
}
/**
* 获取第一个有效的字段
*/
export function getFirstUsefulField(buckets, metrics, fieldNames) {
if (fieldNames === void 0) { fieldNames = []; }
if (buckets.length > 0) {
var splitBucket = buckets.splice(0, 1);
return splitBucket[0];
}
else if (metrics.length > 0) {
var splitMetric = metrics.splice(0, 1);
return splitMetric[0];
}
else if (fieldNames.length > 0) {
return fieldNames[0];
}
else {
return '';
}
}
/**
* 获取第一个有效的分组
*/
export function getFirstUsefulBucket(buckets) {
if (buckets.length > 0) {
var splitBucket = buckets.splice(0, 1);
return splitBucket[0];
}
else {
return '';
}
}
/**
* 获取第一个有效的指标
*/
export function getFirstUsefulMetric(metrics) {
if (metrics.length > 0) {
var splitMetric = metrics.splice(0, 1);
return splitMetric[0];
}
else {
return '';
}
}