@a1um1/lightweight-charts-react-wrapper
Version:

132 lines (131 loc) • 4.64 kB
JavaScript
import { __rest } from "tslib";
import { AreaSeries, BarSeries, CandlestickSeries, HistogramSeries, LineSeries, BaselineSeries, createSeriesMarkers,
// MarkerSign,
} from "lightweight-charts";
import { clone, merge } from "./utils.js";
export function series(target, params) {
var _a;
const emptyMarkers = [];
let [subject, defaults] = createSeries(target.subject(), params);
let data = params.reactive ? params.data : null;
let markers = (_a = params.markers) !== null && _a !== void 0 ? _a : emptyMarkers;
let view = params.type === "Custom" ? params.view : null;
const seriesMarkers = createSeriesMarkers(subject, markers);
let destroyed = false;
// Never use shorthand properties as default values
delete defaults.borderColor;
delete defaults.wickColor;
// subject.setMarkers(markers);
return {
alive() {
return !destroyed;
},
subject() {
return subject;
},
update(nextParams) {
const { type: nextType, data: nextData, markers: nextMarkers = emptyMarkers, reactive: nextReactive, } = nextParams;
if (nextType !== subject.seriesType()) {
throw new TypeError("Can not change type of series in runtime. Report a bug please");
}
if (nextParams.type === "Custom" &&
subject.seriesType() === "Custom" &&
nextParams.view !== view) {
target.subject().removeSeries(subject);
[subject, defaults] = createSeries(target.subject(), nextParams);
view = nextParams.view;
return;
}
subject.applyOptions(merge(clone(defaults), omit(nextParams)));
if (!nextReactive) {
data = null;
}
if (nextData !== data && nextReactive) {
data = nextData;
subject.setData(data);
}
if (nextMarkers !== markers) {
markers = nextMarkers;
seriesMarkers.setMarkers(markers);
// const seriesMarkers = createSeriesMarkers(subject, markers);
}
},
destroy() {
if (target.alive()) {
target.subject().removeSeries(subject);
}
destroyed = true;
},
};
}
function createSeries(chart, params) {
switch (params.type) {
case "Area": {
const series = chart.addSeries(AreaSeries, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
case "Bar": {
const series = chart.addSeries(BarSeries, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
case "Candlestick": {
const series = chart.addSeries(CandlestickSeries, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
case "Histogram": {
const series = chart.addSeries(HistogramSeries, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
case "Line": {
const series = chart.addSeries(LineSeries, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
case "Baseline": {
const series = chart.addSeries(BaselineSeries, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
case "Custom": {
const series = chart.addCustomSeries(params.view, omit(params));
const defaults = clone(series.options());
series.setData(params.data);
return [
series,
defaults,
];
}
}
}
function omit(params) {
const { reactive, data, type, view } = params, rest = __rest(params, ["reactive", "data", "type", "view"]);
return Object.assign({}, rest);
}