svelte-lightweight-charts
Version:
Svelte wrapper for financial lightweight charts built with HTML5 canvas
83 lines (82 loc) • 3.01 kB
JavaScript
export function series(target, params) {
let subject = createSeries(target, params);
let reference;
let data = params.reactive ? params.data : null;
let markers = params.markers;
return {
update(nextParams) {
if (nextParams.type !== subject.seriesType()) {
target.removeSeries(subject);
reference === null || reference === void 0 ? void 0 : reference(null);
subject = createSeries(target, nextParams);
reference === null || reference === void 0 ? void 0 : reference(subject);
return;
}
if (nextParams.options) {
subject.applyOptions(nextParams.options);
}
if (!nextParams.reactive) {
data = null;
}
if (nextParams.data !== data && nextParams.reactive) {
data = nextParams.data;
subject.setData(data);
}
if (nextParams.markers !== markers) {
markers = nextParams.markers;
subject.setMarkers(markers);
}
},
updateReference(nextReference) {
if (nextReference !== reference) {
reference === null || reference === void 0 ? void 0 : reference(null);
reference = nextReference;
reference === null || reference === void 0 ? void 0 : reference(subject);
}
},
destroy() {
reference === null || reference === void 0 ? void 0 : reference(null);
target.removeSeries(subject);
}
};
}
function createSeries(chart, params) {
switch (params.type) {
case 'Area': {
const series = chart.addAreaSeries(params.options);
series.setData(params.data);
series.setMarkers(params.markers);
return series;
}
case 'Bar': {
const series = chart.addBarSeries(params.options);
series.setData(params.data);
series.setMarkers(params.markers);
return series;
}
case 'Candlestick': {
const series = chart.addCandlestickSeries(params.options);
series.setData(params.data);
series.setMarkers(params.markers);
return series;
}
case 'Histogram': {
const series = chart.addHistogramSeries(params.options);
series.setData(params.data);
series.setMarkers(params.markers);
return series;
}
case 'Line': {
const series = chart.addLineSeries(params.options);
series.setData(params.data);
series.setMarkers(params.markers);
return series;
}
case 'Baseline': {
const series = chart.addBaselineSeries(params.options);
series.setData(params.data);
series.setMarkers(params.markers);
return series;
}
}
}