@visactor/vtable
Version:
canvas table width high performance
47 lines (44 loc) • 2.37 kB
JavaScript
import { BandScale } from "@visactor/vscale";
import { isArray } from "@visactor/vutils";
export class BandAxisScale {
constructor() {
this._scale = new BandScale, this._scales = [ this._scale ];
}
valueToPosition(value) {
return this._scale.scale(value);
}
getPosition(values) {
let position = 0, bandScale = this._scale;
if (1 === this._scales.length || 1 === values.length) position = this.valueToPosition(values[0]); else {
const max = Math.min(values.length, this._scales.length);
for (let i = 0; i < max; i++) position += this._scales[i].scale(values[i]);
bandScale = this._scales[max - 1];
}
return {
position: position,
bandScale: bandScale
};
}
calcScales(defalutBandInnerPadding, defalutBandOuterPadding) {
var _a, _b;
const {bandPadding: bandPadding, paddingInner: paddingInner, paddingOuter: paddingOuter} = this, isBandPaddingArray = isArray(bandPadding), isPaddingInnerArray = isArray(paddingInner), isPaddingOuterArray = isArray(paddingOuter);
for (let i = 0; i < this._scales.length; i++) {
const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding, _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner, _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;
this._scales[i].paddingInner(null !== (_a = null != _paddingInner ? _paddingInner : _padding) && void 0 !== _a ? _a : defalutBandInnerPadding, !0).paddingOuter(null !== (_b = null != _paddingOuter ? _paddingOuter : _padding) && void 0 !== _b ? _b : defalutBandOuterPadding);
}
}
dataToPosition(values, cfg = {}) {
var _a;
if (0 === values.length || 0 === this._scales.length) return 0;
const {position: position, bandScale: bandScale} = this.getPosition(values);
return position + bandScale.bandwidth() * (null !== (_a = cfg.bandPosition) && void 0 !== _a ? _a : .5);
}
updateScaleDomain(domain) {
for (let i = 0; i < this._scales.length; i++) this._scales[i].domain(domain);
}
updateRange(newRange) {
const [start, end] = this._scale.range();
newRange[0] === start && newRange[1] === end || this._scale.range(newRange);
}
}
//# sourceMappingURL=band-scale.js.map