@antv/f6-plugin
Version:
F6 plugin
196 lines (162 loc) • 5.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _tslib = require("tslib");
var _ui = require("./ui");
var _base = _interopRequireDefault(require("../base"));
var _util = require("@antv/util");
var _dispatcher = require("./dispatcher");
var _const = require("./utils/const");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var TimeBar =
/** @class */
function (_super) {
(0, _tslib.__extends)(TimeBar, _super);
function TimeBar(cfg) {
return _super.call(this, cfg) || this;
}
TimeBar.prototype.getDefaultCfgs = function () {
return {
className: 'f6-component-timebar',
padding: 10,
type: 'trend',
data: [],
trend: {
smooth: true
},
controllerCfg: {
speed: 1
},
slider: {
start: _const.SLIDER_START,
end: _const.SLIDER_END
},
tick: {
start: _const.SLIDER_START,
end: _const.SLIDER_END
},
filterEdge: false
};
};
TimeBar.prototype.init = function () {
var _this = this;
setTimeout(function () {
_this.render();
_this.initEvent();
});
};
TimeBar.prototype.filterData = function (evt) {
var _a;
var value = evt.value;
var trendData = this.get('data');
if (!trendData || trendData.length === 0) {
console.warn('请配置 TimeBar 组件的数据');
return;
}
var rangeChange = this.get('rangeChange');
var graph = this.get('graph');
var min = Math.round(trendData.length * value[0]);
var max = Math.round(trendData.length * value[1]);
max = max >= trendData.length ? trendData.length - 1 : max;
min = min >= trendData.length ? trendData.length - 1 : min;
var tickLabelFormatter = (_a = this._cfgs.tick) === null || _a === void 0 ? void 0 : _a.tickLabelFormatter;
var minText = tickLabelFormatter ? tickLabelFormatter(trendData[min]) : trendData[min].date;
var maxText = tickLabelFormatter ? tickLabelFormatter(trendData[max]) : trendData[max].date;
if (rangeChange) {
rangeChange(graph, minText, maxText);
} else {
// 自动过滤数据,并渲染 graph
if (!this.cacheGraphData || this.cacheGraphData.nodes && this.cacheGraphData.nodes.length === 0) {
this.cacheGraphData = graph.get('data'); // graph.save() as GraphData;
} // 过滤不在 min 和 max 范围内的节点
var filterData = this.cacheGraphData.nodes.filter(function (d) {
return d.date >= trendData[min].date && d.date <= trendData[max].date;
});
var nodeIds_1 = filterData.map(function (node) {
return node.id;
});
var fileterEdges = [];
if (this.cacheGraphData.edges) {
// 过滤 source 或 target 不在 min 和 max 范围内的边
fileterEdges = this.cacheGraphData.edges.filter(function (edge) {
return nodeIds_1.includes(edge.source) && nodeIds_1.includes(edge.target);
});
if (this.get('filterEdge')) {
fileterEdges = fileterEdges.filter(function (edge) {
return edge.date >= trendData[min].date && edge.date <= trendData[max].date;
});
}
}
graph.changeData({
nodes: filterData,
edges: fileterEdges
});
}
};
TimeBar.prototype.render = function () {
var _a = this._cfgs,
data = _a.data,
width = _a.width,
padding = _a.padding,
type = _a.type,
trend = _a.trend,
slider = _a.slider,
controllerCfg = _a.controllerCfg,
tick = _a.tick,
sliderTick = _a.sliderTick;
var graph = this.get('graph');
var group = graph.get('uiGroup');
var timebar = null;
switch (type) {
case 'trend':
timebar = (0, _ui.createTrendUI)({
group: group,
width: width,
padding: padding,
data: data,
trend: trend,
slider: slider,
controllerCfg: controllerCfg,
sliderTick: sliderTick
});
break;
case 'tick':
timebar = (0, _ui.createTickUI)({
group: group,
width: width,
padding: padding,
tick: tick,
data: data,
controllerCfg: controllerCfg
});
break;
case 'simple':
timebar = (0, _ui.createSimpleTimeBarUI)({
group: group,
width: width,
padding: padding,
slider: slider,
data: data,
controllerCfg: controllerCfg,
sliderTick: sliderTick
});
break;
} // 移动到左下角
var graphHeight = graph.get('height');
group.translate(0, graphHeight - timebar.height);
};
TimeBar.prototype.initEvent = function () {
(0, _dispatcher.subscribe)('RANGE_CHANGE', (0, _util.throttle)(this.filterData.bind(this), 200, {
trailing: true,
leading: true
}));
};
TimeBar.prototype.destroy = function () {
(0, _dispatcher.unsubscribeAll)();
};
return TimeBar;
}(_base.default);
var _default = TimeBar;
exports.default = _default;