@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
338 lines (337 loc) • 14.3 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var mobx_1 = require("mobx");
var lodash_1 = require("lodash");
var one_d_1 = __importDefault(require("../stores/one-d"));
var bind_1 = __importDefault(require("../../../utils/bind"));
var honeycomb_1 = require("../../../constants/honeycomb");
var chart_drill_down_1 = require("../../../services/chart-drill-down");
var chart_common_action_1 = require("../../../services/chart-common-action");
var util_1 = require("./util");
var DefaultColor = '#1C7BDC';
var HoneycombStore = /** @class */ (function (_super) {
__extends(HoneycombStore, _super);
function HoneycombStore() {
return _super !== null && _super.apply(this, arguments) || this;
}
HoneycombStore.prototype.getItemSplitterColor = function (value, colorSplit) {
if (!colorSplit || !colorSplit.colorPalette.value) {
return DefaultColor;
}
var colorPalette = colorSplit.colorPalette, _a = colorSplit.scale, scale = _a === void 0 ? [] : _a;
var colors = colorPalette.value;
if (!lodash_1.isNil(value) &&
lodash_1.isNumber(lodash_1.toNumber(value)) &&
!isNaN(lodash_1.toNumber(value)) &&
lodash_1.size(scale) &&
lodash_1.size(colors)) {
var min_1 = lodash_1.first(scale);
var max_1 = lodash_1.last(scale);
if (lodash_1.isNumber(min_1) && lodash_1.toNumber(value) <= min_1) {
return colors[0];
}
if (lodash_1.isNumber(max_1) && lodash_1.toNumber(value) >= max_1) {
return lodash_1.last(colors);
}
var index = scale.findIndex(function (item) { return lodash_1.isNumber(item) && lodash_1.toNumber(item) >= lodash_1.toNumber(value); });
if (index >= 1) {
return colors[index - 1];
}
if (!lodash_1.isNumber(max_1)) {
return lodash_1.last(colors);
}
}
return DefaultColor;
};
HoneycombStore.prototype.getItemGradientColor = function (value, colors) {
var _a = this.minMax, min = _a.min, max = _a.max;
return util_1.getColor(min, max, value, colors);
};
HoneycombStore.prototype.getItemColor = function (value) {
var _a = this.chartStyleService, colorType = _a.colorType, colorSplitter = _a.colorSplitter, colors = _a.colors;
if (colorType === honeycomb_1.EColorType.Custom) {
return this.getItemSplitterColor(value, colorSplitter);
}
return this.getItemGradientColor(value, colors);
};
Object.defineProperty(HoneycombStore.prototype, "data", {
get: function () {
return this.dataset.rows;
},
enumerable: false,
configurable: true
});
Object.defineProperty(HoneycombStore.prototype, "minMax", {
get: function () {
var currentMetrics = this.chartStyleService.currentMetrics;
var fields = this.dataset.fields;
if (currentMetrics.length == 0) {
return { min: 0, max: 0 };
}
var metricIndex = lodash_1.findIndex(fields, function (f) { return f.key === currentMetrics[0]; });
var data = this.data.map(function (item) {
return isNaN(lodash_1.toNumber(item[metricIndex]))
? 0
: lodash_1.toNumber(item[metricIndex]);
});
return { min: lodash_1.min(data) || 0, max: lodash_1.max(data) || 0 };
},
enumerable: false,
configurable: true
});
Object.defineProperty(HoneycombStore.prototype, "series", {
get: function () {
var _this = this;
var _a = this.chartStyleService, currentBuckets = _a.currentBuckets, currentMetrics = _a.currentMetrics;
var fields = this.dataset.fields;
if (currentMetrics.length == 0) {
return [];
}
var metricIndex = lodash_1.findIndex(fields, function (f) { return f.key === currentMetrics[0]; });
var bucketsIndexs = currentBuckets
.map(function (m) { return lodash_1.findIndex(fields, function (f) { return f.key === m; }); })
.filter(function (num) { return num !== -1; });
if (metricIndex === -1 || bucketsIndexs.length === 0) {
return [];
}
// 没有分组(第一个分组不做分组,用于填充蜂窝图的值)
if (currentBuckets.length <= 1) {
var data = this.data.map(function (item, index) {
var name = fields[metricIndex].key;
var value = isNaN(lodash_1.toNumber(item[metricIndex]))
? 0
: lodash_1.toNumber(item[metricIndex]);
var color = _this.getItemColor(value);
value = _this.chartStyleService.unitTransformer(value);
if (currentBuckets[0]) {
var firstBucketIndex = bucketsIndexs[0];
name = (item[firstBucketIndex][0] || '');
}
var originRow = _this.originDataset.rows[index];
return {
name: name,
value: value,
line: [],
color: color,
originRow: originRow
};
});
return [{ name: currentBuckets[0] || currentMetrics[0], data: data }];
}
var resMap = {};
this.data.forEach(function (item, index) {
var indexes = __spread([metricIndex], bucketsIndexs);
var values = indexes.map(function (index) {
var label = fields[index].key;
var value = item[index][0];
return { label: label, value: value };
});
var metricValue = values[0];
values.shift();
var firstBucketValue = values[0];
values.shift();
var key = values
.slice()
.map(function (item) { return item.label + "=" + item.value; })
.join(',');
var name = firstBucketValue.label + "=" + firstBucketValue.value + "," + key;
var value = isNaN(lodash_1.toNumber(metricValue.value))
? 0
: lodash_1.toNumber(item[metricIndex]);
var color = _this.getItemColor(value);
value = _this.chartStyleService.unitTransformer(value);
var originRow = _this.originDataset.rows[index];
if (!resMap[key]) {
resMap[key] = [
{
key: key,
name: name,
value: value,
line: [],
color: color,
originRow: originRow
}
];
}
else {
var data = resMap[key];
data.push({
name: "" + name,
value: value,
line: [],
color: color,
originRow: originRow
});
resMap[key] = data;
}
});
var series = lodash_1.keys(resMap).map(function (itemKey) {
return { name: itemKey, data: resMap[itemKey] };
});
return series;
},
enumerable: false,
configurable: true
});
Object.defineProperty(HoneycombStore.prototype, "option", {
get: function () {
var _a = this.chartStyleService, maxRadius = _a.maxRadius, minRadius = _a.minRadius, distance = _a.distance, honeycombNum = _a.honeycombNum, lineGroupNum = _a.lineGroupNum;
var option = {
margin: {
top: 20,
left: 20,
right: 20,
bottom: 0
},
honeycomb: {
/**
* 最大半径
*/
maxRadius: maxRadius || 100,
/**
* 最小半径
*/
minRadius: minRadius || 10,
/**
* 蜂窝间距占半径比例,小数表示
* 0.06
*/
distance: distance || 0.06
},
groups: {
/**
* 每个组每一行蜂窝数目
*/
honeycombNum: honeycombNum || 6,
/**
* 图表每一行图表组数
*/
lineGroupNum: lineGroupNum || 3,
/**
* 标题高度
*/
titleHeight: 20,
/**
* 是否显示title
*/
showTitle: true
},
series: this.series
};
return option;
},
enumerable: false,
configurable: true
});
Object.defineProperty(HoneycombStore.prototype, "originFields", {
get: function () {
return this.originDataset.fields;
},
enumerable: false,
configurable: true
});
HoneycombStore.prototype.handleDrillDown = function (params) {
this.onAction({
currentBuckets: this.currentBuckets,
currentMetrics: this.currentMetrics,
originRow: params.originRow,
fields: this.originFields
}, chart_drill_down_1.HoneycombDrillDownService, chart_common_action_1.HoneycombActionService);
};
__decorate([
bind_1.default,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number, Object]),
__metadata("design:returntype", void 0)
], HoneycombStore.prototype, "getItemSplitterColor", null);
__decorate([
bind_1.default,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number, Array]),
__metadata("design:returntype", void 0)
], HoneycombStore.prototype, "getItemGradientColor", null);
__decorate([
bind_1.default,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", void 0)
], HoneycombStore.prototype, "getItemColor", null);
__decorate([
mobx_1.computed,
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], HoneycombStore.prototype, "data", null);
__decorate([
mobx_1.computed,
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], HoneycombStore.prototype, "minMax", null);
__decorate([
mobx_1.computed,
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], HoneycombStore.prototype, "series", null);
__decorate([
mobx_1.computed,
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], HoneycombStore.prototype, "option", null);
__decorate([
mobx_1.computed,
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], HoneycombStore.prototype, "originFields", null);
__decorate([
bind_1.default,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], HoneycombStore.prototype, "handleDrillDown", null);
return HoneycombStore;
}(one_d_1.default));
exports.default = HoneycombStore;