Иногда превью дашборда не отображается в меню выбора дашборда. Это связано с тем, что виджет не успевает прорисоваться, перед тем как сохраняется preview.
Все операции производим в коде виджета.
Создаём переменную и promise (в начале кода виджета).
var loadHandler = null; var loadedPromise = new Promise((resolve,reject)=>{ // resolve();//вызвать когда виджет отрисовался loadHandler = resolve; });
Добавить в объект виджета highcharts строку(подробно: https://api.highcharts.com/highcharts/chart.events.load ):
chart: { events: { load: loadHandler } }
Метод встроен в библиотеку и вызывается после отрисовки виджета. Он резолвит promise, который мы создали ранее, давая сигнал что можно делать скриншот. Для других библиотек можно использовать аналогичные встроенные методы или же резолвить promise через фиксированный промежуток времени.
Вставляем строку кода (в конец кода виджета):
({ isLoaded: function(){ return loadedPromise } })
promise отрабатывает и мы передаём его успешное выполнение во внутреннюю функцию, которую вызываем в отдельном блоке.
При использовании другой библиотеки, отличной от highcharts, можно использовать timeout вместо метода “load”