NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/lib/interaction/drag.js
2023-09-14 14:47:11 +08:00

289 lines
7.7 KiB
Java

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var Util = require('../util');
var Interaction = require('./base');
var filterData = require('./helper/filter-data');
var getColDef = require('./helper/get-col-def');
var getLimitRange = require('./helper/get-limit-range');
var DAY_TIMESTAMPS = 86400000; // const G2 = require('../core.js');
var DRAGGING_TYPES = ['X', 'Y', 'XY'];
var DEFAULT_TYPE = 'X';
var Drag = /*#__PURE__*/function (_Interaction) {
_inheritsLoose(Drag, _Interaction);
var _proto = Drag.prototype;
_proto.getDefaultCfg = function getDefaultCfg() {
var cfg = _Interaction.prototype.getDefaultCfg.call(this);
return Util.mix({}, cfg, {
type: DEFAULT_TYPE,
stepRatio: 0.05,
limitRange: {},
stepByField: {},
threshold: 20,
originScaleDefsByField: {},
previousPoint: null,
isDragging: false
});
};
_proto._disableTooltip = function _disableTooltip() {
var me = this;
var chart = me.chart;
var tooltipController = chart.get('tooltipController');
if (tooltipController) {
me._showTooltip = true;
chart.tooltip(false);
}
};
_proto._enableTooltip = function _enableTooltip(ev) {
var me = this;
var chart = me.chart;
if (me._showTooltip) {
chart.tooltip(true);
chart.showTooltip(ev);
}
};
function Drag(cfg, chart) {
var _this;
_this = _Interaction.call(this, cfg, chart) || this;
var me = _assertThisInitialized(_this);
me.type = me.type.toUpperCase();
me.chart = chart;
me.coord = chart.get('coord');
var data = me.data = chart.get('data'); // pre process
filterData(chart);
var scales = chart.getYScales();
var xScale = chart.getXScale();
scales.push(xScale);
var scaleController = chart.get('scaleController');
scales.forEach(function (scale) {
var field = scale.field;
me.limitRange[field] = getLimitRange(data, scale);
var def = scaleController.defs[field] || {};
me.originScaleDefsByField[field] = Util.mix(def, {
nice: !!def.nice
});
if (scale.isLinear) {
me.stepByField[field] = (scale.max - scale.min) * me.stepRatio;
}
});
if (!DRAGGING_TYPES.includes(me.type)) {
me.type = DEFAULT_TYPE;
}
me._disableTooltip();
return _this;
} // onDragstart() { }
// onDrag() { }
// onDragend() { }
_proto._applyTranslate = function _applyTranslate(scale, offset, total) {
if (offset === void 0) {
offset = 0;
}
var me = this;
if (scale.isLinear) {
me._translateLinearScale(scale, offset, total);
} else {
me._translateCatScale(scale, offset, total);
}
};
_proto._translateCatScale = function _translateCatScale(scale, offset, total) {
var me = this;
var chart = me.chart;
var type = scale.type,
field = scale.field,
values = scale.values,
ticks = scale.ticks;
var colDef = getColDef(chart, field);
var originValues = me.limitRange[field];
var ratio = offset / total;
var valueLength = values.length;
var deltaCount = Math.max(1, Math.abs(parseInt(ratio * valueLength)));
var firstIndex = originValues.indexOf(values[0]);
var lastIndex = originValues.indexOf(values[valueLength - 1]);
if (offset > 0 && firstIndex >= 0) {
// right
for (var i = 0; i < deltaCount && firstIndex > 0; i++) {
firstIndex -= 1;
lastIndex -= 1;
}
var newValues = originValues.slice(firstIndex, lastIndex + 1);
var newTicks = null;
if (type === 'timeCat') {
var tickGap = ticks.length > 2 ? ticks[1] - ticks[0] : DAY_TIMESTAMPS;
for (var _i = ticks[0] - tickGap; _i >= newValues[0]; _i -= tickGap) {
ticks.unshift(_i);
}
newTicks = ticks;
}
chart.scale(field, Util.mix({}, colDef, {
values: newValues,
ticks: newTicks
}));
} else if (offset < 0 && lastIndex <= originValues.length - 1) {
// left
for (var _i2 = 0; _i2 < deltaCount && lastIndex < originValues.length - 1; _i2++) {
firstIndex += 1;
lastIndex += 1;
}
var _newValues = originValues.slice(firstIndex, lastIndex + 1);
var _newTicks = null;
if (type === 'timeCat') {
var _tickGap = ticks.length > 2 ? ticks[1] - ticks[0] : DAY_TIMESTAMPS;
for (var _i3 = ticks[ticks.length - 1] + _tickGap; _i3 <= _newValues[_newValues.length - 1]; _i3 += _tickGap) {
ticks.push(_i3);
}
_newTicks = ticks;
}
chart.scale(field, Util.mix({}, colDef, {
values: _newValues,
ticks: _newTicks
}));
}
};
_proto._translateLinearScale = function _translateLinearScale(scale, offset, total) {
var me = this;
var chart = me.chart,
limitRange = me.limitRange; // linear / cat
var min = scale.min,
max = scale.max,
field = scale.field;
if (min === limitRange[field].min && max === limitRange[field].max) return;
var ratio = offset / total;
var range = max - min;
var colDef = getColDef(chart, field);
chart.scale(field, Util.mix({}, colDef, {
nice: false,
min: min + ratio * range,
max: max + ratio * range
}));
};
_proto.start = function start(ev) {
var me = this;
var canvas = me.canvas;
var canvasDOM = canvas.get('canvasDOM');
canvasDOM.style.cursor = 'pointer'; // const coord = chart.get('coord');
me.isDragging = true;
me.previousPoint = {
x: ev.x,
y: ev.y
};
me._disableTooltip();
};
_proto.process = function process(ev) {
var me = this;
if (me.isDragging) {
var chart = me.chart,
type = me.type,
canvas = me.canvas,
coord = me.coord,
threshold = me.threshold;
var canvasDOM = canvas.get('canvasDOM');
canvasDOM.style.cursor = 'move'; // const coord = chart.get('coord');
var previousPoint = me.previousPoint;
var currentPoint = ev;
var deltaX = currentPoint.x - previousPoint.x;
var deltaY = currentPoint.y - previousPoint.y;
var modified = false;
if (Math.abs(deltaX) > threshold && type.indexOf('X') > -1) {
modified = true;
var xScale = chart.getXScale();
me._applyTranslate(xScale, xScale.isLinear ? -deltaX : deltaX, coord.width);
}
if (Math.abs(deltaY) > threshold && type.indexOf('Y') > -1) {
modified = true;
var yScales = chart.getYScales();
yScales.forEach(function (yScale) {
me._applyTranslate(yScale, currentPoint.y - previousPoint.y, coord.height);
});
}
if (modified) {
me.previousPoint = currentPoint;
chart.repaint();
}
}
};
_proto.end = function end(ev) {
var me = this;
me.isDragging = false;
var canvas = me.canvas;
var canvasDOM = canvas.get('canvasDOM');
canvasDOM.style.cursor = 'default';
me._enableTooltip(ev);
};
_proto.reset = function reset() {
var me = this;
var view = me.view,
originScaleDefsByField = me.originScaleDefsByField;
var scales = view.getYScales();
var xScale = view.getXScale();
scales.push(xScale);
scales.forEach(function (scale) {
if (scale.isLinear) {
var field = scale.field;
view.scale(field, originScaleDefsByField[field]);
}
});
view.repaint();
me._disableTooltip();
};
return Drag;
}(Interaction);
module.exports = Drag;