ct-react-stockcharts
Version:
Highly customizable stock charts with ReactJS and d3
84 lines (77 loc) • 2 kB
JavaScript
import noop from "./noop";
import identity from "./identity";
import { functor } from "./index";
export default function () {
var undefinedValue = undefined,
windowSize = 10,
accumulator = noop,
source = identity,
skipInitial = 0;
// eslint-disable-next-line prefer-const
var mappedSlidingWindow = function mappedSlidingWindow(data) {
var size = functor(windowSize).apply(this, arguments);
var windowData = [];
var accumulatorIdx = 0;
var undef = functor(undefinedValue);
// console.log(skipInitial, size, data.length, windowData.length);
var result = [];
data.forEach(function (d, i) {
// console.log(d, i, windowData.length);
var mapped = void 0;
if (i < skipInitial + size - 1) {
mapped = undef(d, i);
result.push(mapped);
windowData.push(mapped);
return;
}
if (i >= skipInitial + size) {
// Treat windowData as FIFO rolling buffer
windowData.shift();
}
windowData.push(source(d, i));
mapped = accumulator(windowData, i, accumulatorIdx++);
result.push(mapped);
windowData.pop();
windowData.push(mapped);
return;
});
return result;
};
mappedSlidingWindow.undefinedValue = function (x) {
if (!arguments.length) {
return undefinedValue;
}
undefinedValue = x;
return mappedSlidingWindow;
};
mappedSlidingWindow.windowSize = function (x) {
if (!arguments.length) {
return windowSize;
}
windowSize = x;
return mappedSlidingWindow;
};
mappedSlidingWindow.accumulator = function (x) {
if (!arguments.length) {
return accumulator;
}
accumulator = x;
return mappedSlidingWindow;
};
mappedSlidingWindow.skipInitial = function (x) {
if (!arguments.length) {
return skipInitial;
}
skipInitial = x;
return mappedSlidingWindow;
};
mappedSlidingWindow.source = function (x) {
if (!arguments.length) {
return source;
}
source = x;
return mappedSlidingWindow;
};
return mappedSlidingWindow;
}
//# sourceMappingURL=mappedSlidingWindow.js.map