in viz-lib/src/visualizations/chart/Renderer/initChart.ts [52:142]
export default function initChart(container: any, options: any, data: any, additionalOptions: any, onError: any) {
const handleError = createErrorHandler(onError);
const plotlyOptions = {
showLink: false,
displaylogo: false,
};
if (additionalOptions.hidePlotlyModeBar) {
// @ts-expect-error ts-migrate(2339) FIXME: Property 'displayModeBar' does not exist on type '... Remove this comment to see the full error message
plotlyOptions.displayModeBar = false;
}
const plotlyData = prepareData(data, options);
const plotlyLayout = prepareLayout(container, options, plotlyData);
let isDestroyed = false;
let updater = initPlotUpdater();
function createSafeFunction(fn: any) {
// @ts-expect-error ts-migrate(7019) FIXME: Rest parameter 'args' implicitly has an 'any[]' ty... Remove this comment to see the full error message
return (...args) => {
if (!isDestroyed) {
try {
return fn(...args);
} catch (error) {
handleError(error);
}
}
};
}
let unwatchResize = () => {};
const promise = Promise.resolve()
.then(() => Plotly.newPlot(container, plotlyData, plotlyLayout, plotlyOptions))
.then(
createSafeFunction(() =>
updater
.append(updateAxes(container, plotlyData, plotlyLayout, options))
.append(updateChartSize(container, plotlyLayout, options))
.process(container)
)
)
.then(
createSafeFunction(() => {
container.on(
"plotly_restyle",
createSafeFunction((updates: any) => {
// This event is triggered if some plotly data/layout has changed.
// We need to catch only changes of traces visibility to update stacking
// @ts-expect-error ts-migrate(2339) FIXME: Property 'visible' does not exist on type 'object'... Remove this comment to see the full error message
if (isArray(updates) && isObject(updates[0]) && updates[0].visible) {
updateData(plotlyData, options);
updater.append(updateAxes(container, plotlyData, plotlyLayout, options)).process(container);
}
})
);
options.onHover && container.on("plotly_hover", options.onHover);
options.onUnHover && container.on("plotly_unhover", options.onUnHover);
unwatchResize = resizeObserver(
container,
createSafeFunction(() => {
updater.append(updateChartSize(container, plotlyLayout, options)).process(container);
})
);
})
)
.catch(handleError);
// @ts-expect-error ts-migrate(7022) FIXME: 'result' implicitly has type 'any' because it does... Remove this comment to see the full error message
const result = {
initialized: promise.then(() => result),
setZoomEnabled: createSafeFunction((allowZoom: any) => {
const layoutUpdates = { dragmode: allowZoom ? "zoom" : false };
// @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ dragmode: string | boolean; }'... Remove this comment to see the full error message
return Plotly.relayout(container, layoutUpdates);
}),
destroy: createSafeFunction(() => {
isDestroyed = true;
container.removeAllListeners("plotly_restyle");
unwatchResize();
delete container.__previousSize; // added by `updateChartSize`
Plotly.purge(container);
}),
};
return result;
}