-
Notifications
You must be signed in to change notification settings - Fork 58
/
libLoader.ts
52 lines (45 loc) · 1.3 KB
/
libLoader.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import $script from 'scriptjs';
let loaded: any; // Plotly Library
let isFull = false;
let wasCDN = false;
export function loadPlotly(cfg: any): Promise<any> {
if (loaded) {
console.log('using already loaded value');
return Promise.resolve(loaded);
}
const needsFull = cfg.settings.type !== 'scatter';
let url = 'public/plugins/natel-plotly-panel/lib/plotly-cartesian.min.js';
if (cfg.loadFromCDN) {
url = needsFull
? 'https://cdn.plot.ly/plotly-latest.min.js'
: 'https://cdn.plot.ly/plotly-cartesian-latest.min.js';
} else if (needsFull) {
url = 'public/plugins/natel-plotly-panel/lib/plotly.min.js';
}
return new Promise((resolve, reject) => {
$script(url, resolve);
}).then(res => {
isFull = needsFull;
wasCDN = cfg.loadFromCDN;
loaded = window['Plotly'];
return loaded;
});
}
export function loadIfNecessary(cfg: any): Promise<any> {
if (!loaded) {
return loadPlotly(cfg);
}
if (wasCDN !== cfg.loadFromCDN) {
console.log('Use CDN', cfg.loadFromCDN);
loaded = null;
return loadPlotly(cfg);
}
const needsFull = cfg.settings.type !== 'scatter';
if (needsFull && !isFull) {
console.log('Switching to the full plotly library');
loaded = null;
return loadPlotly(cfg);
}
// No changes
return Promise.resolve(null);
}