Починка загрузки превью дашбордов

Иногда превью дашборда не отображается в меню выбора дашборда. Это связано с тем, что виджет не успевает прорисоваться, перед тем как сохраняется preview.

Все операции производим в коде виджета.

  1. Создаём переменную и promise (в начале кода виджета).

    var loadHandler = null; var loadedPromise = new Promise((resolve,reject)=>{ // resolve();//вызвать когда виджет отрисовался loadHandler = resolve; });
  2. Добавить в объект виджета highcharts строку(подробно: Highcharts API Option: chart.events.load ):

    chart: { events: { load: loadHandler } }

    Метод встроен в библиотеку и вызывается после отрисовки виджета. Он резолвит promise, который мы создали ранее, давая сигнал что можно делать скриншот. Для других библиотек можно использовать аналогичные встроенные методы или же резолвить promise через фиксированный промежуток времени.

  3. Вставляем строку кода (в конец кода виджета):

    ({ isLoaded: function(){ return loadedPromise } })

Метод isLoaded возвращает promise во внешнюю функцию, которая отслеживает загрузку виджета. И когда promise будет resolve, внешняя функция поймёт что виджет загрузился и можно делать скриншот.

 

При использовании другой библиотеки, отличной от highcharts, можно использовать timeout вместо метода “load”